erste Datenzeile beim Import übersprungen

8

Ich verwende eine Datei im XML-Format, um eine CSV-Datei zu importieren, und die erste Datenzeile wird übersprungen. Ich kann nicht herausfinden warum.

Datei formatieren

%Vor%

CSV

%Vor%

Abfrage

%Vor%

Ergebnis

%Vor%

Wenn FIRSTROW in 1 geändert wird, wird das Ergebnis zu:

%Vor%

Wenn die Kopfzeile aus der CSV-Datei entfernt wird und FIRSTROW in 1 geändert wird, wird das Ergebnis wie erwartet zurückgegeben:

%Vor%

Da dies ein automatisierter Bericht ist, der mit Kopfzeilen geliefert wird, gibt es andere Möglichkeiten, dies zu beheben?

    
Kermit 11.09.2013, 20:13
quelle

6 Antworten

2

Hier gibt es ein paar Probleme:

  1. Ich vermute, dass in der ersten Zeile kein gültiges \n vorhanden ist. Andernfalls würde SQL Server die ersten beiden Zeilen nicht verschieben, wenn Sie zu FIRSTROW = 1 wechseln.

  2. Die Verwendung von "," als Spaltentrennzeichen funktioniert hervorragend für alle Spalten mit Ausnahme der ersten und der letzten Spalte. Dies führt zu einem führenden " für die erste Spalte und einem abschließenden " für die letzte Spalte. Sie können mit letzterem umgehen, indem Sie Ihre ROWTERMINATOR in "\n ändern, aber das funktioniert nur, wenn Sie der Kopfzeile auch eine nachgestellte " hinzufügen können (während Sie sicherstellen, dass es eine gültige \n gibt). Dort). An diesem Punkt können Sie auch sicherstellen, dass die Kopfzeile den Datenzeilen in allen Aspekten entspricht, also:

    %Vor%

Ehrlich gesagt denke ich, dass Sie eine Woche damit verbringen könnten, mit all diesen nittig-kernigen BCP und BULK INSERT Problemen zu kämpfen und immer noch keine perfekte Lösung zu haben, die keine postoperativen Aktionen erfordert (wie z trimmen von führenden / nachlaufenden " -Zeichen aus bestimmten Spalten). Meine Empfehlung: Verbringe 20 Minuten und schreibe einen Parser in C #, der diese Dateien automatisch korrigiert - die Headerzeile entfernt, sicherstellt, dass die richtigen Begrenzer vorhanden sind, alle dummen " entfernen usw., bevor SQL Server die Datei jemals sieht. Das Säubern der Datei wird viel weniger Aufwand als die Reifen, durch die Sie jetzt springen. Ich bin mir sicher, dass es Lösungen dafür gibt, aber IIRC, mit denen du schon seit einiger Zeit kämpfst ...

    
Aaron Bertrand 11.09.2013, 20:50
quelle
2

Der Terminator des ersten Feldes sollte nur ',', nicht '', '' sein.

Durch die folgende Zeile ersetzen, es wird funktionieren:

%Vor%

Folgendes passiert mit Ihrem ursprünglichen Dateiformat ...

Die ersten Spalten enden mit: "," ... Das bedeutet, SQL Server analysiert die erste Zeile, liest dann die zweite Zeile und erhält das erste Feld:

%Vor%

Es liest weiter und bekommt das zweite Feld (denken Sie daran, wir sind immer noch in der zweiten Zeile der Datei):

%Vor%

Es hat jetzt die erste Zeile ...

Es liest dann die nächste Zeile:

%Vor%

Wenn Sie also die erste Zeile überspringen, wird die erste Zeile übersprungen, weil Ihre erste Zeile keine Anführungszeichen verwendet ...

Hoffe das hilft ..

    
Baral 11.09.2013 20:36
quelle
1

Überprüfen Sie auch die Zeichencodierung der CSV-Datei. Es kann UTF-8 mit einer Drei-Byte-Signatur sein. Die bcp.exe scheint dieses Format nicht zu verstehen. Stellen Sie sicher, dass Ihre Datei im ASCII-Zeichenformat gespeichert ist. Sie können auch versuchen, den Codepage-Parameter UTF-8 (-C 65001) anzugeben, aber AFAIR funktioniert nicht mit älteren SQL Server-Versionen.

Bearbeiten: Beim Importieren als .csv-Datei mit einer UTF-8-Signatur habe ich das gleiche Problem beobachtet: Die erste Datenzeile (die mit der Signatur) wird übersprungen.

    
Stanislav Vitebskiy 19.01.2015 20:14
quelle
0
%Vor%

Die hier bereitgestellte BCP-Formatdatei ist hilfreich, um das erste Feld zu überspringen, das den Anfang "auf COLUMN1-Wert im Wesentlichen ignorieren kann. Das FIELD1 auf dem Datensatz wird von einem einzelnen doppelten Anführungszeichen beendet und wird übersprungen. Das Feld2 wird von beendet ein doppeltes Anführungszeichen, gefolgt von einem Komma, gefolgt von Double quote \ ", \" (Back Schrägstriche hier sind für das doppelte Anführungszeichen). Das Field3 wird durch ein Doppel Zitat gefolgt von einem CR (Carriage Return) gefolgt von LF (lineFeed ) Das ist \ "\ r \ n.

Das System liest das erste Feld bis zum doppelten Anführungszeichen und überspringt es, liest das zweite Feld bis \ ", \" und ordnet es COLUMN1 zu, liest das dritte Feld bis \ "\ r \ n und ordnet es zu COLUMN2 und bewegt sich mit dem nächsten Datensatz usw. Grundsätzlich sollte dies für Ihre CSV-Datei-Feeds sauber funktionieren.

    
user2948133 02.11.2013 16:16
quelle
0

Fügen Sie ein false -Feld "0" in die XML-Formatdatei ein, aber ordnen Sie keine zusätzlichen Spalten zu.

%Vor%

Dies funktionierte für mich mit der folgenden Abfrage:

%Vor%     
Joe de Souza 04.12.2014 21:53
quelle
0

Ich hatte genau das gleiche Problem, der Header von CSV-Daten muss auch doppelte Anführungszeichen haben (sogar Sie versuchen, die erste Zeile zu überspringen, wenn Sie BCP oder Bulk einfügen, das ist unglaublich) oder Sie entfernen einfach den Header (zuerst Zeile Ihrer CSV-Datei):

"SPALTE1", "SPALTE2" "ABC", "ABC123456" "TNT", "TNT123456"

    
Yonghui Mo 30.04.2016 00:27
quelle

Tags und Links