[英]Bulk Insert Sql Server millions of record
我有一个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 BULK INSERT但它必须从文本文件中读取,这个场景是否可以使用BULK INSERT? (我之前从未使用过它)。
谢谢
更新:我知道SqlBulkCopy,但它要求我首先使用DataTable,这对性能有好处吗? 如果可能的话,我想直接从我的数据源插入到SQL Server,而不必在内存DataTable中使用。
如果您是用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 Integration Service”将数据从源数据流转换为目标数据流。 源可以是文本文件,目标可以是SQL Server表。 您的转换在批量插入模式下执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.