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






