Feldterminator Problem beim Formatieren von Dateien

Ich habe eine Datendatei im TXT-Format und habe sie mit Bulk Insert im folgenden Befehl geladen:

Bulk insert [table1] FROM "data.txt" WITH ( FIELDTERMINATOR ="|", ROWTERMINATOR ="0x0a", ) 

Der Code funktioniert gut. Beim Versuch, eine Formatdatei mit der Masseneinfügung zum Laden der Datei zu verwenden, sind jedoch einige Probleme beim Angeben des Feldterminators für die letzte Zeile aufgetreten.

Hier ist die Spezifikation für die letzte Zeile in der Formatdatei:

21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS 

Mit „0x0a“ als Abschlusszeichen wird folgende Fehlermeldung angezeigt:

Fehler beim Konvertieren von Massenladedaten (Abschneiden) für Zeile 2, Spalte 1 (var1).

Mit „\ n“ können Daten geladen werden, aber „|“ wird auch in die letzte Spalte geladen. Zum Beispiel bekomme ich „0.5 |“ anstelle von „0,5“.

„| \ n“, „0x0a“, „| 0x0a“, „\ r \ n“ gibt den gleichen Fehler zurück wie „|“

Fehler beim Konvertieren von Massenladedaten (Abschneiden) für Zeile 2, Spalte 1 (var1).

I “ Ich verwende SQL-Server 2016, Windows 10 64-Bit.

Kann mir jemand dabei helfen? Vielen Dank im Voraus für Ihre Hilfe!

Jason

Kommentare

  • Da Sie ' jetzt einige Fragen dazu gestellt haben, sehen Sie sich diese Seite an: sommarskog.se/bulkload.html
  • @sp_BlitzErik, vielen Dank für Ihre Antwort! Dieser Artikel ist sehr nützlich und bietet weit mehr Informationen als die MSDN-Site. Lesen Sie das Beispiel unter 4.1 Ich wurde mit dem Feldterminator " \ " \ r \ n " verwechselt. Das Zitat ist wirklich vollständig. Ist es ein Typ?
  • Wenn ich mich richtig erinnere, ist es ' eine Escape-Sequenz. Wenn Sie rea beibehalten ding there ' ist eine bessere Erklärung weiter unten.

Antwort

Nach einem ganzen Tag mit Zeilenvorschub / Hex-Code stellte ich schließlich fest, dass mein Problem durch fehlende Spalten in den Formatdateien verursacht wurde. Der Datensatz ist neu für mich und ich dachte, er hat 21 Zeilen, während er tatsächlich 22 Zeilen hat. Aus diesem Grund hat der SQL Server immer das letzte „|“ aus der Datendatei geladen.

Hier ist eine Referenz für andere, die möglicherweise daran interessiert sind, eine Datendatei vom UNIX-System mit anderen Zeilenabschlüssen als Windows zu laden. Es gibt drei Methoden:

  1. Masseneinfügung verwenden und den Zeilenabschluss auf „0x0a“ setzen.
  2. eine Formatdatei verwenden und den Feldabschluss des letzten Feldes auf „\ n“ setzen „.
  3. Verwenden Sie ein dynamisches SQL mit der Funktion Char (10), um den Zeilenvorschub (LF) in die Befehlszeichenfolge einzufügen, und führen Sie dann die Befehlszeichenfolge aus ().

Bevor Sie diese Methoden ausprobieren, verwenden Sie einen Notizblock, um alle Steuerzeichen anzuzeigen und die von den Textdateien verwendeten Steuerzeichen zu bestätigen.

Wenn keine dieser Methoden für Sie funktioniert, haben Sie möglicherweise andere Probleme als die Zeile Feed- / Zeilenabschluss.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.