批量插入 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,而不必在内存中使用数据表。
如果你是用 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 表。转换在批量插入模式下执行。