摘要:[SQL]如何使用BULK INSERT大量匯入資料
--因為有換行符號CHAR(10)的關係, 一定要用動態SQL才可以
DECLARE @FileBulk varchar(500)
SELECT @FileBulk='BULK INSERT BulkInsertTable FROM ''D:\ABC\YOURFILE.TXT'''
SELECT @FileBulk=@FileBulk + ' WITH'
SELECT @FileBulk=@FileBulk + '('
SELECT @FileBulk=@FileBulk + 'FIRSTROW=1,' --從第一行開始讀取
SELECT @FileBulk=@FileBulk + 'FIELDTERMINATOR=''|'','
SELECT @FileBulk=@FileBulk + 'ROWTERMINATOR =''' + CHAR(10) + ''','--換行符號只能用動態SQL方式加入
SELECT @FileBulk=@FileBulk + 'BATCHSIZE=10000, '--每一萬筆就COMMIT一次,以免交易檔爆炸
SELECT @FileBulk=@FileBulk + 'ROWS_PER_BATCH=1000000, '--總共幾萬筆
SELECT @FileBulk=@FileBulk + 'KEEPNULLS, '--原本是NULL的就塞NULL,不要塞入TABLE SCHEMA註明的預設值
SELECT @FileBulk=@FileBulk + 'MAXERRORS=50, '
SELECT @FileBulk=@FileBulk + 'TABLOCK '
SELECT @FileBulk=@FileBulk + ')'
EXEC (@FileBulk)
ps.記得資料檔的路徑是根據SQLServer那台路徑為準喔,你不可能從台灣執行SQL遠端連線到美國的SQLServer去做Bulk Insert喔,除非你的SQL知道美國那台電腦的資料檔檔案路徑
ps2.還有要記得要在SSMS裡面設定你登入SQLServer的那個帳號的伺服器腳色喔,要把bulkadmin打勾
(安全性=>登入=>右鍵選擇該帳號並選擇屬性=>伺服器腳色=>bulkadmin打勾)