如何传递和返回一个数组到存储过程?

时间:2010-04-26 05:52:42

标签: c# .net stored-procedures

我想知道如何将数组传递给存储过程,而存储过程又会从c#.net返回一个数组?

1 个答案:

答案 0 :(得分:4)

根据情况,这里有不同的选项。我在下面的很多例子中都使用SQL Server,但是大部分都可以在系统之间进行广泛的转换。

对于一个相对较小的数组(理想的向量),你可以构造一个分隔的字符串(制表符分隔,逗号分隔,等等),并将其传递到你的数据库并解析 - 通常是手动的(DBMS通常缺少“拆分”例程),但是很容易获得预先编写的“拆分”实现(例如,作为SQL Server中的UDF)。典型用法:

SELECT st.*
FROM dbo.SplitUDF(@myarg) #udf
INNER JOIN SOME_TABLE st ON st.ID = #udf.Value

Xml是另一种选择,特别是对于复杂数据; SQL Server 2005及更高版本具有内置的xml解析,但通常不应该这样做。

Table-valued parameters是另一种选择,但这只是SQL Server 2008 - 它可能正是您所寻找的。

另一个选项,特别是对于大数据,是将数据分别泵入服务器 (批量插入,SQLBulkCopy,“bcp”,SSIS等)并通过SQL处理数据一旦它在那里。

要获取数组/表格数据,标准SELECT应该是您的默认选项,当然您也可以构造xml或分隔字符数据。后者可以通过SQL的一个怪癖来完成:

DECLARE @foo varchar(max)
SET @foo = ''
SELECT @foo = @foo + st.SomeColumn + '|' -- pipe-delimited, note trailing |
FROM SOME_TABLE st