批量插入Sql Server数百万条记录

Ari*_*ief 11 c# sql-server windows-services bulkinsert

我有一个Windows服务应用程序,它接收具有以下格式的数据流

IDX|20120512|075659|00000002|3|AALI                 |Astra Agro Lestari Tbk.                                     |0|ORDI_PREOPEN|12  |00000001550.00|00000001291.67|00001574745000|00001574745000|00500|XDS1BXO1|                                        |00001574745000|›§
IDX|20120512|075659|00000022|3|ALMI                 |Alumindo Light Metal Industry Tbk.                          |0|ORDI        |33  |00000001300.00|00000001300.00|00000308000000|00000308000000|00500|--U3---2|                                        |00000308000000|õÄ
Run Code Online (Sandbox Code Playgroud)

这些数据以数百万行的顺序排列00000002....00198562,我必须根据序列将它们解析并插入到数据库表中.

我的问题是,将这些数据插入我的数据库的最佳方式(最有效)是什么?我试图使用一个简单的方法来打开一个SqlConnection对象,然后生成一个SQL插入脚本字符串,然后使用SqlCommand对象执行该脚本,但是这种方法花费的时间太长了.

我读过我可以使用Sql BULK INSERT但它必须从文本文件中读取,这个场景是否可以使用BULK INSERT?(我之前从未使用过它).

谢谢

更新:我知道SqlBulkCopy,但它要求我首先使用DataTable,这对性能有好处吗?如果可能的话,我想直接从我的数据源插入到SQL Server,而不必在内存DataTable中使用.

Mar*_*ers 22

如果您是用C#编写的,可能需要查看SqlBulkCopy类.

允许您使用来自其他源的数据有效地批量加载SQL Server表.

  • ;)惊人的人们应该永远不会看文档 - SqlBUlkCopy类型的弹出至少检查.注意:编写允许SqlBulkCopy使用对象枚举作为数据源的转换器是微不足道的(一小时);) (2认同)
  • 请参阅@ TomTom的评论. (2认同)