Javascript 如何将数组发送到存储过程?如果我从JS发送数据,最好的数据格式是什么?

Javascript 如何将数组发送到存储过程?如果我从JS发送数据,最好的数据格式是什么?,javascript,sql-server-2008,stored-procedures,Javascript,Sql Server 2008,Stored Procedures,如何将数组发送到存储过程? 我想把它从JS发送到存储过程。这项任务的最佳数据格式是什么?使用MS SQL时,您应该能够使用逗号分隔的数据格式。使用MS SQL时,您应该能够使用逗号分隔的数据格式。我过去曾使用XML将数据数组传递到SQL server,它与XML数据类型和XQuery配合得很好。我过去曾使用XML将数据数组传递到SQL server,它与XML数据类型和XQuery配合得很好。SQL 2008支持表值参数,因此您可以将数据表作为参数传递给存储过程。在此之前的常见方法如前所述——通

如何将数组发送到存储过程?
我想把它从JS发送到存储过程。这项任务的最佳数据格式是什么?

使用MS SQL时,您应该能够使用逗号分隔的数据格式。

使用MS SQL时,您应该能够使用逗号分隔的数据格式。

我过去曾使用XML将数据数组传递到SQL server,它与XML数据类型和XQuery配合得很好。

我过去曾使用XML将数据数组传递到SQL server,它与XML数据类型和XQuery配合得很好。

SQL 2008支持表值参数,因此您可以将数据表作为参数传递给存储过程。在此之前的常见方法如前所述——通过CSV或XML参数


SQL 2008支持表值参数,因此可以将数据表作为参数传递给存储过程。在此之前的常见方法如前所述——通过CSV或XML参数


下面是一个简单的示例,使用CSV输入参数来存储进程

create proc dbo.ListCustomers
(
    @CustomerIDs varchar(MAX)
)
as
begin

-- convert paramter to xml
declare @XmlStr varchar(MAX)
set @XmlStr = '<R><I ID="' + replace(@CustomerIDs, ',', '"></I><I ID="') + '"></I></R>'

-- table variable that holds the ID's
declare @IdTable table (ID int)

-- load the XML document and insert id's to @IdTable
declare @XmlDoc int
exec sp_xml_preparedocument @XmlDoc out, @XmlStr
insert into @IdTable select ID from openxml(@XmlDoc, '/R/I',1) with (ID int)
exec sp_xml_removedocument @XmlDoc


-- use @IdTable in your query
select c.*
from tblCustomer c
  join @IdTable as I on c.CustomerID = I.ID 

end
go

-- usage:
-- exec ListCustomers '3823,3838,3845,3925,4051'

下面是一个简单的示例,使用CSV输入参数来存储进程

create proc dbo.ListCustomers
(
    @CustomerIDs varchar(MAX)
)
as
begin

-- convert paramter to xml
declare @XmlStr varchar(MAX)
set @XmlStr = '<R><I ID="' + replace(@CustomerIDs, ',', '"></I><I ID="') + '"></I></R>'

-- table variable that holds the ID's
declare @IdTable table (ID int)

-- load the XML document and insert id's to @IdTable
declare @XmlDoc int
exec sp_xml_preparedocument @XmlDoc out, @XmlStr
insert into @IdTable select ID from openxml(@XmlDoc, '/R/I',1) with (ID int)
exec sp_xml_removedocument @XmlDoc


-- use @IdTable in your query
select c.*
from tblCustomer c
  join @IdTable as I on c.CustomerID = I.ID 

end
go

-- usage:
-- exec ListCustomers '3823,3838,3845,3925,4051'

好的,您可以使用HTML5的Web数据库API来允许客户端与客户端的数据库交互。要允许客户端与远程数据库交互,您必须实现一种服务器端语言,如Java/PHP,以充当客户端和数据库之间的中介。好的,您可以使用HTML5的Web数据库API允许客户端与客户端的数据库交互。要允许客户端与远程数据库交互,您必须实现一种服务器端语言,如Java/PHP,以充当客户端和数据库之间的中介。人们说,符号计数可能存在问题:这样的字符串中不能超过8000个符号。是吗??使用CSV而不是XML是一个好主意吗?因为它不应该在任何地方使用这个字符串。@Anton不太确定您指的是什么-8000是您可以为VARCHAR定义的最大大小,然后再使用支持最多2GB文本的VARCHARMAX。XML数据类型也支持高达2GB的数据。问题是,您必须解析/分解这些值。因此,我建议查看表值参数方法。我在我的博客上比较了这三个方面的表现:还有一个问题。做这项工作的更好方法是什么:在一个事务中逐个多次使用数组参数或存储过程调用存储过程?谢谢。我会分批传递,并且在更少的呼叫中传递,而不是一次一个。人们说符号的计数可能有问题:这样的字符串中不能超过8000个符号。是吗??使用CSV而不是XML是一个好主意吗?因为它不应该在任何地方使用这个字符串。@Anton不太确定您指的是什么-8000是您可以为VARCHAR定义的最大大小,然后再使用支持最多2GB文本的VARCHARMAX。XML数据类型也支持高达2GB的数据。问题是,您必须解析/分解这些值。因此,我建议查看表值参数方法。我在我的博客上比较了这三个方面的表现:还有一个问题。做这项工作的更好方法是什么:在一个事务中逐个多次使用数组参数或存储过程调用存储过程?谢谢你。我会一批通过,少打几个电话,而不是一次一个。