在这种情况下,将数百万行插入SQL表的最快方法是什么?

时间:2019-04-08 19:24:14

标签: c# sql-server sqlbulkcopy

案例情况如下。 通过C#,我被迫在外部服务器上调用存储过程,每次调用该存储过程都会返回5000万条记录。每个记录都包含几个用逗号分隔的字段,我必须在逗号分隔并插入另一台服务器的数据库表中。由于记录必须在插入之前进行处理,因此我认为不应该使用SqlBulkCopy,因为它将按原样将数据写入到达表,而不进行拆分。将所有记录保存在阵列上是禁止的,因为运行.exe的计算机的RAM不足以实现此目的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

SqlBulkCopy类可以流式传输DataReader

这意味着您可以创建一个自定义DataReader,它将封装数据来自的DataReader。

使用自定义DataReader可以逐行处理数据,并在SqlBulkCopy从中复制数据之前进行应用程序需要的任何格式设置或其他设置。

通过使用EnablesStreaming = true,将确保内存中只有少量数据。

  

您是否建议我实现IDataReader接口?

是的,因为您需要在插入之前处理数据。而且您需要流式传输,因此无法加载内存中的所有内容。

事实上,这是我的一些有关批量插入工作的库,例如:

在后台,我们使用自定义IDataReader来访问和处理实体。