2013-01-16 55 views
13

我試圖從CSV運行以下命令批量插入數據file--「列太長」錯誤與BULK INSERT

BULK INSERT TestDB.dbo.patent 
FROM 'C:\1patents.csv' 
WITH (FIRSTROW = 1, FIELDTERMINATOR = '^', ROWTERMINATOR='\n'); 

我得到的錯誤是this--

Msg 4866,Level 16,State 1,Line 1
批量加載失敗。行1列6的數據文件中列太長。
驗證是否正確指定了字段終止符和行終止符。
Msg 7399,Level 16,State 1,Line 1
鏈接服務器「(null)」的OLE DB提供程序「BULK」報告了錯誤。提供者沒有提供任何關於錯誤的信息。
Msg 7330,Level 16,State 2,Line 1
無法從鏈接服務器「(空)」的OLE DB提供程序「BULK」獲取一行。

現在,這是在第一row--

00000001^^18360713^295^4^0 

及表中的最後一個字段的數據(對應於100。上述= 0的數據的第6列)的類型爲「INT 」。

我在這裏做錯了什麼?爲什麼我會收到上述錯誤?

+1

通常問題與行分隔符。正確檢查您的分隔符。 –

回答

2

除非文件來源是Unix的,很可能是該文件的行終止真的是

\ r \ n

要麼使用十六進制編輯器來驗證文件的終止,或者只是嘗試作爲行終止符。

+0

我嘗試過使用您建議的終止符 - 但仍然收到相同的錯誤?請讓我知道,如果你有任何進一步的想法,以幫助解決這個......謝謝.... – Arvind

+12

在這裏的答案:http://stackoverflow.com/a/4207050/706578建議使用ROWTERMINATOR ='0x0a'如果'\ n'or'\ r \ n'不適合你。它爲我工作! –

29

我從Oracle/Unix中提取出來的。我用ROWTERMINATOR = '0x0a'替換\r\n,它爲我工作。
非常感謝!

+0

這對我有用。謝謝 (: – Sonu

13

就像上面的回答,我有同樣的問題導入到SQL Server的csv文件。我正在使用ROWTERMINATOR = '\n',我也嘗試使用'\r\n''\r'。他們都沒有工作。

但是,當使用ROWTERMINATOR = '0x0a'表加載沒有問題。

我不知道「爲什麼?」在這之後,希望別人能夠闡明它。

0

我面臨類似的問題,並知道除非文件是UNIX類型\ r \ n是好的。

當您生成格式文件(.fmt或.xml)時,請注意左起第3列。其名爲的最小長度爲的列。有時sql服務器默認它爲雖然你沒有在創建腳本中提到它。將該值更改爲。有時你可能也必須允許NULL,所以把它改爲零,它現在應該工作