[英]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.