2010-10-05 49 views

回答

2

它看起來像你可以用SQL Server 2008或更新版本(至少有一個DataTable)做到這一點。這裏是鏈接:

http://www.eggheadcafe.com/community/aspnet/10/10138579/passing-dataset-to-stored-procedure.aspx

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

+0

SQL Server 2005的任何希望? – 2010-10-05 11:36:59

+0

你可以通過將你的DataSet序列化爲XML(使用它的WriteXml方法),然後將XML作爲字符串參數傳入來進行破解。這意味着您必須在存儲過程中執行XML處理。 – MusiGenesis 2010-10-05 12:54:18

0

由於article從MusiGenesis的回答指出

在SQL Server 2005和更早的版本,它是 不可能通過可變 作爲參數傳遞給存儲過程的表。 當多行數據到SQL時 服務器需要向SQL Server發送多行 數據,開發人員要麼一次發送一行,要麼 與其他變通辦法一起發送,以滿足 的要求。儘管VB.Net開發人員 最近告訴我,.Net 中有一個可用的SQLBulkCopy對象,可以一次將多行數據發送到SQL 服務器,但仍不能將 傳遞給存儲過程。

在陳述明顯這裏的風險是兩個更接近

的參數多處理過程

你可能會重新評估,如果你真的,真的需要通過一個通用表變量。雖然有時這是無法避免的,但爲什麼這是MS SQL Server具有的一組功能的後續增加的部分原因,因爲通常情況下,您可以通過構建存儲過程和數據處理流程來繞過它。

如果您能夠'參數化'您的過程,那麼您應該可以讓存儲過程根據有限數量的參數檢索完整數據集。 (這與數據庫只與存儲過程級別的應用程序接口更加強大,這種方法同樣也不是一件壞事,通過限制靈活性減少了可能的情況的數量,並因此減少了可能的未受影響的情況的數量。閱讀:安全漏洞和一般的bug)

臨時表

除了上面總是有與臨時表方法,它可以或多或少複雜,這取決於共享,你需要的數據範圍(共享可以在數據庫用戶,應用程序用戶,連接,進程等之間)。

好的副作用是,這樣的方法將允許進程的持久性(這使您更接近於撤消,重做和繼續中斷工作的能力)。

相關問題