由於前段時間做大資料量的匯入程式.在做的時候遇到的問題.幾萬條的資料從Excel中匯入到資料庫中,速度是非常的慢,程式簡直不能運行,後來就研究了BCP命令的方式進行匯入.幾十萬的資料也就幾十秒,很快,所以將自己的小成果給大家分享.當然,可能有很多可以完善的地方,大家共同努力吧
使用BCP 命令輸入大量的資料
1:目的:將大兩資料輸入sql server 等資料庫
2:方法:BCP命令
3:實現方式:
Sql 語句:
bulk insert T1 from 'C:"TxtFile2.txt'
WITH
( FIELDTERMINATOR=',',
ROWS_PER_BATCH=100,
errorfile='c:"aa.csv',
formatfile='C:"sql.fmt'
)
From 後面的源檔案可以是txt 也可以是csv格式,兩種格式的FIELDTERMINATOR一樣都是’,’.
此外對於一張表,我可以只匯入某些欄位.這是我們必須用formatfile格式檔案進行映射.檔案的格式為”fmt”格式文法如下
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="50" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="200" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR=""r"n" MAX_LENGTH="50" />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="id" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="age" xsi:type="SQLINT"/>
</ROW>
</BCPFORMAT>
注意TERMINATOR的設定.是”,” 還是”"t”.txt和csv檔案為”,”
Excel格式檔案為”"t”.
目前已經通過了對txt和csv格式的匯入,對於xls檔案的匯入,還在進一步的研究中