簡體   English   中英

批量插入Sql Server數百萬條記錄

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM