BCP為M$ SQL Server的一個公用程式(utility),主要的功能為將大量儲存在檔案中的資料拷貝進入資料庫表格中,或者將資料庫表格中的資料匯出到檔案中,而這些動作都可以透過command line來完成,所以也可以很方便地透過batch file的編寫來當成scheduled job來使用。
我之前主要用到的是要把資料(text file)匯入到資料庫表格中,所以使用BCP的方式如下:
bcp database.dbo.datatable in "c:\output.txt" -c -T
而在前面的例子當中,我用了-c參數是因為要匯入的資料為純文字資料,而-T參數為代表trusted connection。
bcp.exe這個utility會放在SQL Server安裝目錄中的90\Tools\Binn子目錄中,以我所使用的SQL Server 2005來說,是在C:\Program Files\Microsoft SQL Server\90\Tools\Binn裡頭,所以在使用前可以先設一下path會比較方便一些。 🙂
path C:\Program Files\Microsoft SQL Server\90\Tools\Binn
另外要注意的是,要匯入的資料檔案裡頭,每一個欄位的資料都是以 tab 做分隔,還有要注意的是要注意有沒有空白行,否則匯入的資料將會有錯誤的情況,比方說造成第一個欄位的資料前面會多出\r\n這樣的資料出來。
而如果匯入的資料有日期這樣的特殊格式,建議還是先當成文字來做匯入(也就是說先把datatable裡頭的欄位datatype設定成char之類的格式),然後再透過sql statement來更改datatype,這樣比較乾脆一點。
實際上我在使用的時候,匯入五百多萬筆資料(檔案大小為200多MB)大概只需要三四分鐘(包含建立 index),比起慢吞吞的從text file中讀取資料再慢慢地insert要快上太多太多了。