2016-04-20 31 views
0

Ich verwende einen Masseneinfügebefehl für SQL Server, aber aus irgendeinem Grund wird die erste Zeile nicht eingefügt. Warum kann ich keine Daten aus der ersten Zeile einfügen? Ist Bulk-Insert erwartet Header als Standard und wie kann ich das umgehen? Wenn ich eine Dummy-Zeile hinzufüge und WITH auf FIRSTROW = 2 setze, dann wird die erste Zeile ohne ein Problem eingefügt, aber ich denke nicht, dass dies eine nette Lösung ist.Bulk insert SQL-Befehl kann die erste Zeile nicht einfügen

Fehlercode:

Msg 4864, Ebene 16, Status 1, Zeile 1
Schüttlastdaten-Umwandlungsfehler (Typ Mismatch oder ungültiges Zeichen für die angegebene Codepage) für Reihe 1, Spalte 1 (table_id).

Befehl:

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

Beispieldaten:

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

Haben Sie versucht, einen 'ROWTERMINATOR' von \ r \ n zu verwenden? Es ist möglich, dass Sie, wenn Sie Ihre Datei in dem von Ihnen verwendeten Editor öffnen und dann speichern, dass sie automatisch von einem Zeilenabschluss in den anderen konvertiert und dieses Problem behebt, während der Header nichts damit zu tun hat. Nur eine Vermutung, aber etwas, was ich schon mal gesehen habe. –

+1

@TomH Ich hatte das gleiche Problem. Ich finde mit etwas wie Notepad ++ und zeigen alle Zeichen machen Importe so wie viel einfacher, wie Sie die Registerkarten, Zeilenumbrüche, Zeilenumbrüche, etc. – UnhandledExcepSean

+0

@TomH '\ r \ n' hat nicht funktioniert, es war ein Kodierungsfehler. Von UTF-8-BOM zu ANSI geändert und \ n funktionierte. – Ogglas

Antwort

2

Das Skript ist wahrscheinlich utf-8 und Sie versuchen, es aus cmd mit cp-1252 zu laden oder etwas, das UTF-Bom bei der Der Anfang flippt den Dolmetscher aus. Schauen Sie mit einem Hexeditor und Sie werden es sehen.

Als ANSI speichern und erneut versuchen.

+0

Es war UTF-8-BOM und ich sah es direkt beim Betrachten im HEX-Editor. Gott verdammt '0xEF 0xBB 0xBF' – Ogglas

0

Ich habe Probleme mit Line Feed/Carriage Return Line Feed, könnte dies das Problem auch hier sein. Für Line Feed hatte ich eine Reihe von Terminator 0x0a zu verwenden:

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