KB-SQL 2000 BULK INSERT Error
今天在一台SQL 2000上做BULK INSERT,語法是
BULK INSERT PicLibrary
FROM 'C:\Output\PicInfo.txt'
WITH
(
BATCHSIZE = 1000,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n',
TABLOCK
)
我之前在SQL 2005上做過同樣的事,但這回在SQL 2000上卻一直爆出錯誤:
訊息 4866,層級 16,狀態 1,行 10 大量載入失敗,資料檔案的資料行對於資料列1,資料行4而言太長。請確定已指定正確的欄位結束字元和資料列結束字元。
(英文: The bulk load failed. The column is too long in the data file for row 1, column 4. Verify that the field terminator and row terminator are specified correctly.)
訊息 7399,層級 16,狀態 1,行 10 OLEDB Provider 'MyServer'報告了錯誤。提供者並未給予任何關於錯誤的資訊。 OLEDB錯誤追蹤[OLEDB Provider 'MyServer' IRowset::GetNextRows returned 0x80004005: 提供者並未給予任何關於錯誤的資訊。]。
(英文: The OLE DB provider "BlBULK" reported an error. The provider did not give any information about the error.)
反覆嘗試,耗了好幾個小時。最後Google到這篇討論,情境跟我的很像,都是用Import Data會成功,直接在Query Analyzer BULK INSERT卻出錯,但差別在於我用的是SQL 2000,該案例則是在SQL 2005上,因此文中的Hotfix無濟於事。
又看了幾篇文章,有人提到\n .vs. \r\n的問題,我試著將欄分隔符號改為",",列分隔符號改為";",改用後就一次OK!!
我認為這是SQL 2000的Bug,不過SQL 2008都快出來了,不大想花時間跟這隻老恐龍拼命,就此打住。把我的經驗整理如下:
【情境】
- BULK INSERT時遇到上述錯誤
- 同一檔案用Import Data匯入卻無誤
- 使用了'\t'分欄,'\r\n'或'\n'分列
【解決方式】
將\t, \n換成其他符號。
PS: SQL 2005 User則可試試
FIX: 當您在 Microsoft SQL Server 2005 執行 BULK INSERT 陳述式錯誤訊息: " The 大量載入失敗。 資料行是針對 <n>, <n> 個資料行資料列將資料檔中的 "blah" 太長
http://support.microsoft.com/kb/942660/zh-tw