2016-04-20 85 views
0

我對SQL Server使用批量插入命令,但出於某種原因沒有插入第一行。爲什麼我不能從第一行插入數據?是批量插入預期標題爲默認,我如何繞過這個?如果我添加一個虛擬行並將WITH設置爲FIRSTROW = 2,那麼插入第一行時沒有問題,但我認爲這不是一個好的解決方案。批量插入SQL命令不能插入第一行

錯誤代碼:

消息4864,級別16,狀態1,行1
批量負載數據轉換錯誤(類型不匹配或無效字符爲指定的代碼頁)爲第1行,第1列(table_id的)。

命令:

BULK INSERT TableData 
FROM 'C:\Users\Oscar\file.csv' 
WITH (FIELDTERMINATOR = ';', 
     ROWTERMINATOR = '\n', 
     KEEPNULLS, 
     KEEPIDENTITY) 

的樣本數據:

1;Text 1;1;0;; 
2;Text 2;1;0;; 
3;Text 3;1;0;; 
4;Text 4;1;0;; 
5;Text 5;1;0;; 
+3

您是否嘗試過使用\ r \ n的'ROWTERMINATOR'?當你使用你正在使用的任何編輯器打開你的文件時,可能會保存它,它會自動將它從一個行終止符轉換到另一個,並解決該問題,而標題與它無關。只是一個猜測,但我以前見過的東西。 –

+1

@TomH我有同樣的問題。我發現使用類似Notepad ++的東西,並顯示所有字符使得像這樣的導入更容易,因爲你可以看到選項卡,回車符,換行符等。 – UnhandledExcepSean

+0

@TomH'\ r \ n'不起作用,這是一個編碼錯誤。從UTF-8-BOM更改爲ANSI並\ n工作。 – Ogglas

回答

2

腳本可能是UTF-8,你想從CMD與CP-1252或東西時,UTF-BOM在加載開始嚇倒了口譯員。 用hexeditor看,你會看到它。

保存爲ANSI並重試。

+0

這是UTF-8-BOM,我在HEX編輯器中查看時直接看到它。上帝該死的'0xEF 0xBB 0xBF' – Ogglas

0

我已經與行/回車換行的問題,這可能是這裏的問題也是如此。對於換行,我不得不使用的0x0a行終止:

BULK INSERT TableData 
FROM 'C:\Users\Oscar\file.csv' 
WITH (
FIELDTERMINATOR = ';', 
ROWTERMINATOR = '0x0a', 
KEEPNULLS, 
KEEPIDENTITY)