我想知道如何将数组传递给存储过程,而存储过程又会从c#.net返回一个数组?
答案 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 - 它可能正是您所寻找的。 p>
另一个选项,特别是对于大数据,是将数据分别泵入服务器 (批量插入,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