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
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因