2010-04-26 113 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 
相關問題