來自DataTable的SQL CLR SqlBulkCopy

clr sql sqlbulkcopy sqlclr sql-server

我們在CLR過程中有一個內存DataTable。在進行大量處理之後,DataTable需要將大量數據加載到數據庫中的表中。不幸的是,由於我們使用的是上下文連接,因此 SqlBulkCopy不起作用(拋出錯誤: 請求的操作在上下文連接 的上下文限制大綱中 不可用 )。

我們正在考慮建立一個額外的常規連接並使用它來執行SQLBulkCopy。考慮到在上下文連接上使用常規連接的開銷,這似乎相當愚蠢。我們已經考慮過對DataTable中的行進行迭代並為每個行插入一條記錄,但它的大小非常大,而且SQLBulkCopy看起來更合適。

我們沒有與DataTable結合,只是在尋找從CLR過程將大量數據插入數據庫的最佳方法。關於DataTable的最後一點,它代表了一個底層數據庫表,但沒有通過DataSet或TableAdapter綁定到表。在CLR程序中這樣做的方法並不是很明顯。這樣做並使用AcceptChanges或Update方法是一種可接受的解決方案。

一般承認的答案

根據表的大小,我估計SQLBulkCopy的速度比插入快10-100倍,因此權衡取捨非常值得。

看你正在對你的DataTable進行'重要處理',這無疑需要時間和資源,使用完整連接而不是上下文連接或打開一個全新連接的額外開銷很小,這是一個很小的代價。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因