BULK INSERT如何將大量數據高效地導入SQL Server
在實際的工作需要中,我們有時候需將大量的數據導入到數據庫中。這時候我們不得不考慮的就是效率問題。本文我們就介紹了一種將大量數據高效地導入SQL Server數據庫的方法,該方法是使用BULK INSERT來實現的,接下來就讓我們來一起了解一下這部分內容。
源數據(文本文件)
下載了大量的股票歷史數據,都是文本格式的:
每個文件第一行包含股票代碼,股票名稱,數據類型.第二行是數據列的名稱:
數據表
在數據庫中新建了一個數據表TestStock,并設置以下字段,但沒有關于"成交額"的字段,因為以后的計算不會用到這個數據。另外這里關于價格的字段沒有使用money數據類型,decimal足矣。
編寫格式化文件
當前數據的格式化文件為:
- <?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
編寫BULKINSERT語句:
- BULKINSERTTestStock
- FROM'C:\SH600475.txt'
- WITH(
- FORMATFILE='C:\BCPFORMAT.xml',
- FIELDTERMINATOR=',',
- ROWTERMINATOR='\r\n')
執行BULKINSERT的速度很快,結果如下:
同樣的效果,如果從文本中讀一行記錄,執行一次INSERTINTO語句的話,需要10秒左右,由此可見BULKINSERT的高效。
關于使用BULK INSERT將大量數據導入SQL Server數據庫的知識就介紹到這里了,希望本次的介紹能夠對您有所幫助。
【編輯推薦】