2010-04-26 179 views
0

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

+1

你的数组有多大? (条目数量和内存占用) – lexu 2010-04-26 05:55:31

+2

..以及您使用的是哪种DBMS! – lexu 2010-04-26 05:56:58

+0

http://stackoverflow.com/questions/1069311/passing-an-array-of-parameters-to-stored-procedure可能的重复 – 2010-04-26 06:02:23

回答

4

根据场景的不同,这里有不同的选项。我在下面的很多示例中使用了SQL Server,但其中大部分可以在系统之间进行广泛转换。对于一个相对较小的数组(理想情况下为vector),可以构造一个分隔字符串(制表符分隔,逗号分隔,无论什么),并将其传递到数据库并解析 - 通常是手动的(DBMS通常缺少“split”例程) ,但获得预先编写的“拆分”实现(例如,作为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--它可能是您正在寻找的东西。

另一种选择,尤其是对大数据,是经由SQL数据泵入服务器分别(批量插入,SQLBulkCopy“BCP”,SSIS无论)和处理数据,一旦它的存在。

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

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