批量插入 SQL 服务器数百万条记录

本文关键字:数百万 记录 服务器 SQL 插入 | 更新日期: 2023-09-27 18:35:14

我有一个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|õÄ

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

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

读到我可以使用 Sql 批量插入,但它必须从文本文件中读取,这种情况是否可以使用批量插入?(我以前从未使用过)。

谢谢

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

批量插入 SQL 服务器数百万条记录

如果你是用 C# 编写的,你可能想看看 SqlBulkCopy 类。

允许您使用来自其他源的数据高效地大容量加载 SQL Server 表。

首先,下载免费的LumenWorks.Framework.IO.Csv库。

其次,像这样使用代码

StreamReader sr = new TextReader(yourStream);
var sbc = new SqlBulkCopy(connectionString);
sbc.WriteToServer(new LumenWorks.Framework.IO.Csv.CsvReader(sr));

是的,真的就是这么简单。

可以使用 SSIS"SQL Server 集成服务"将数据从源数据流转换为目标数据流。源可以是文本文件,目标可以是 SQL Server 表。转换在批量插入模式下执行。