BULK INSERT如何將大量數(shù)據(jù)高效地導入SQL Server
作者:陳華
本文我們詳細介紹了BULK INSERT將大量數(shù)據(jù)高效地導入SQL Server數(shù)據(jù)庫的方法,希望本次的介紹能夠?qū)δ兴鶐椭?/div>
在實際的工作需要中,我們有時候需將大量的數(shù)據(jù)導入到數(shù)據(jù)庫中。這時候我們不得不考慮的就是效率問題。本文我們就介紹了一種將大量數(shù)據(jù)高效地導入SQL Server數(shù)據(jù)庫的方法,該方法是使用BULK INSERT來實現(xiàn)的,接下來就讓我們來一起了解一下這部分內(nèi)容。
源數(shù)據(jù)(文本文件)
下載了大量的股票歷史數(shù)據(jù),都是文本格式的:

每個文件第一行包含股票代碼,股票名稱,數(shù)據(jù)類型.第二行是數(shù)據(jù)列的名稱:

數(shù)據(jù)表
在數(shù)據(jù)庫中新建了一個數(shù)據(jù)表TestStock,并設(shè)置以下字段,但沒有關(guān)于"成交額"的字段,因為以后的計算不會用到這個數(shù)據(jù)。另外這里關(guān)于價格的字段沒有使用money數(shù)據(jù)類型,decimal足矣。

編寫格式化文件
當前數(shù)據(jù)的格式化文件為:
- <?xmlversionxmlversion="1.0"?>
- <BCPFORMAT
- xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <RECORD>
- <FIELDIDFIELDID="1"xsi:type="CharTerm"TERMINATOR=","/>
- <FIELDIDFIELDID="2"xsi:type="CharTerm"TERMINATOR=","/>
- <FIELDIDFIELDID="3"xsi:type="CharTerm"TERMINATOR=","/>
- <FIELDIDFIELDID="4"xsi:type="CharTerm"TERMINATOR=","/>
- <FIELDIDFIELDID="5"xsi:type="CharTerm"TERMINATOR=","/>
- <FIELDIDFIELDID="6"xsi:type="CharTerm"TERMINATOR=","/>
- <FIELDIDFIELDID="7"xsi:type="CharTerm"TERMINATOR="\r\n"/>
- </RECORD>
- <ROW>
- <COLUMNSOURCECOLUMNSOURCE="1"NAME="Date"xsi:type="SQLDATE"/>
- <COLUMNSOURCECOLUMNSOURCE="2"NAME="OpenPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/>
- <COLUMNSOURCECOLUMNSOURCE="3"NAME="HighPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/>
- <COLUMNSOURCECOLUMNSOURCE="4"NAME="LowPrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/>
- <COLUMNSOURCECOLUMNSOURCE="5"NAME="ClosePrice"xsi:type="SQLDECIMAL"PRECISION="6"SCALE="2"/>
- <COLUMNSOURCECOLUMNSOURCE="6"NAME="Volumn"xsi:type="SQLINT"/>
- </ROW>
- </BCPFORMAT>
暫且先保存在C盤目錄下吧,文件名叫BCPFORMAT.xml
編寫B(tài)ULKINSERT語句:
- BULKINSERTTestStock
- FROM'C:\SH600475.txt'
- WITH(
- FORMATFILE='C:\BCPFORMAT.xml',
- FIELDTERMINATOR=',',
- ROWTERMINATOR='\r\n')
執(zhí)行BULKINSERT的速度很快,結(jié)果如下:

同樣的效果,如果從文本中讀一行記錄,執(zhí)行一次INSERTINTO語句的話,需要10秒左右,由此可見BULKINSERT的高效。
關(guān)于使用BULK INSERT將大量數(shù)據(jù)導入SQL Server數(shù)據(jù)庫的知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>
【編輯推薦】
責任編輯:趙鵬
來源:
博客園

相關(guān)推薦























