有時您需要升級包含數據表中許多行的數據庫,或者您需要有一個數組充滿數據,而不是將所有這些數據放在一個字符串中,然後在SQL SERVER中拆分,或者不是迭代數據表在逐行和更新數據庫的代碼行中,有沒有其他方法?除SQL SERVER 2005中的傳統變量外,還有其他類型的變量嗎?如何將諸如數組/數據表的變量傳遞給SQL服務器?
4
A
回答
4
有幾種方法可以做到這一點。
如果你只是簡單的插入行,那麼我會創建一個含有信息的DataTable對象,然後使用SqlBulkCopy的對象:
SqlBulkCopy copier = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.Default);
copier.BatchSize = 500; //# of rows to insert at a time
copier.DestinationTableName = "dbo.MyTable";
copier.WriteToServer(myDataTable);
另一種選擇是包裝在XML數據(無論你想要做到這一點),並使用sql 2005'xml'數據類型將其發送到您的存儲過程(可以做任何您需要的操作)
6
我同意John的說法SqlBulkCopy
或sqlxml是SQL中的最佳選項Server 2005;請注意,在SQL Server 2008中,您也有table valued parameters,這值得考慮;特別是當與新的merge join混合時。
請注意,如果您使用SqlBulkCopy
,我強烈建議僅批量插入到臨時表 - 即僅用於導入的單獨表;然後運行存儲過程將數據移動到活動表。這樣,您可以正確地進行日誌記錄,並且您可以在運行SP時在數據庫中擁有一個緊密範圍的事務(即,您不需要跨越所有網絡IO的事務)。
另一點;如果您正在處理大量數據,則可能不需要加載DataTable
(因爲這會迫使您先將所有數據緩存在內存中);作爲替代方案,也可以編寫自己的IDataReader
來從流(如文件等)中提取數據。見SimpleDataReader
here。 SqlBulkCopy
將非常高興地接受來自IDataReader
的數據。
2
約翰提到使用XML ...這就是我將用於你的情況(SQL Server 2005,併爲你處理SQL的一個存儲過程)的方法。
這裏是如何開始的一個例子(這只是一個選擇語句,但你可以把它更新,如果你想):
CREATE PROCEDURE MySproc (@Accounts XML)
AS
SELECT
Accounts.AccountID.query('.')
FROM
@Accounts.nodes('//ID/text()') AS Accounts(AccountID)
GO
EXEC MySproc '<Accounts><ID>123</ID><ID>456</ID></Accounts>'
相關問題
- 1. 如何將可變數量的參數傳遞給Web服務
- 2. 如何將使用angularjs數組列表傳遞給服務器
- 3. 如何將數據從服務器傳遞給服務人員
- 4. 如何將JavaScript數組的數組傳遞給Web服務?
- 5. 如何將$ scope變量數據傳遞給node.js後端服務器文件?
- 6. 如何將大量數據傳遞給Web服務
- 7. 如何在使用$ http時將數組傳遞給服務器?
- 8. 如何將數組和變量傳遞給PHP中的函數?
- 9. MVC4剃刀。如何將JavaScript變量傳遞給服務器?
- 10. 如何將常量數組或變量數組傳遞給C中的函數?
- 11. 將PHP數組傳遞給js變量
- 12. 將數組傳遞給WCF服務
- 13. 如何將數據表傳遞給Mysql
- 14. 如何將ng-repeat中的scope變量傳遞給javascript數組?
- 15. 如何將Uri中的數組傳遞給WCF WEB API服務?
- 16. 將變量傳遞給SQL
- 17. 如何將數據庫憑據傳遞給wcf服務?
- 18. 將jQuery變量傳遞給ajax數據
- 19. 如何將列表數組參數傳遞給C中的Web服務#
- 20. Laravel - 將數據庫表數據傳遞給js變量
- 21. 如何將可變數量的參數傳遞給sprintf()函數?
- 22. 將數據從javascript表單傳遞給Flask服務器
- 23. 如何將PHP數組傳遞給JavaScript變量?
- 24. 如何在android中將變量數組傳遞給REST URL?
- 25. 如何將數組從Ajax請求傳遞給Javascript變量
- 26. 如何將php數組傳遞給angularjs服務
- 27. 如何將數組傳遞給SQL語句並將其提交給數據庫?
- 28. angular2 route resolve gaurd - 如何將變量傳遞給服務
- 29. 如何將數據庫變量傳遞到控制器函數
- 30. 如何將變量值傳遞給HMTL數據類型