案例情况如下。
通过C#,我被迫在外部服务器上调用存储过程,每次调用该存储过程都会返回5000万条记录。每个记录都包含几个用逗号分隔的字段,我必须在逗号分隔并插入另一台服务器的数据库表中。由于记录必须在插入之前进行处理,因此我认为不应该使用SqlBulkCopy
,因为它将按原样将数据写入到达表,而不进行拆分。将所有记录保存在阵列上是禁止的,因为运行.exe
的计算机的RAM不足以实现此目的。有什么想法吗?
答案 0 :(得分:1)
SqlBulkCopy类可以流式传输DataReader
这意味着您可以创建一个自定义DataReader,它将封装数据来自的DataReader。
使用自定义DataReader可以逐行处理数据,并在SqlBulkCopy从中复制数据之前进行应用程序需要的任何格式设置或其他设置。
通过使用EnablesStreaming = true
,将确保内存中只有少量数据。
您是否建议我实现IDataReader接口?
是的,因为您需要在插入之前处理数据。而且您需要流式传输,因此无法加载内存中的所有内容。
事实上,这是我的一些有关批量插入工作的库,例如:
在后台,我们使用自定义IDataReader来访问和处理实体。