SqlBulkCopy如何工作

.net sqlbulkcopy sql-server

我熟悉C#SqlBulkCopy類,您可以在其中調用通過DataTable傳遞的'WriteToServer'方法。

我的問題是SQL服務器中的底層機制用於批量插入數據?

我問的原因是批量插入 MSDN T-SQL幫助文件中引用的批量插入需要導入數據文件。 SqlBulkCopy是否創建數據文件?

我想了解這些東西,以確定我是否可以在SQL中使用批量插入功能。

如果我編寫一個SQL語句來準備要插入特定表(數千行)的所有行,我可以將它們批量插入到目標表中嗎?這樣的事情就是我現在這樣做的方式,

INSERT INTO sync_filters (table_name, device_id, road_id, contract_id)
    SELECT * FROM dbo.sync_contract_filters (@device_id)

dbo.sync_contract_filters是一個生成要插入的所有行的函數。可以批量插入嗎?

一般承認的答案

SqlBulkCopy不會創建數據文件。它使用可用的通信協議(命名管道,TCP / IP等)將數據表直接從.Net DataTable對象流式傳輸到服務器,並使用BCP使用的相同技術將數據批量插入目標表。


熱門答案

SqlBulkCopy可以使用數據表,IDataReader或DataRow []作為數據源。看一下該類的WriteToServer方法。我發現它是將數據導入SQL Server的一種非常有用的機制。我之前已經將它與CSVReader結合使用了。上一個鏈接讓您了解它如何與實現IDataReader的類一起工作。

您可能需要使用批量大小以確保獲得預期的性能。

如果您希望快速編寫大量數據,那麼MSDN上的“數據加載性能指南 ”是一個非常有用的資源。它更側重於BCP和BULK INSERT之類的東西,但觸及了SQLBulkCopy,並提供了很多值得思考的東西(可能有點過多,但至少無論如何它都是一個有用的參考)。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow