wake-up-neo.net

bcp: Error = [Microsoft] [SQL Server Native Client 10.0] Zeichenfolgendaten, rechte Kürzung

Ich habe kürzlich bei der Arbeit mit bcp einen Fehler festgestellt. Hier ist der Fehler.

SQLState = 22001, NativeError = 0 Fehler = [Microsoft] [SQL Server Native Client 10.0] Zeichenfolgendaten, rechte Kürzung

Ich versuche, die Daten in eine Staging-Tabelle zu entpacken, die keine Einschränkungen aufweist, und die Datentypen sind im Vergleich zu den Daten ebenfalls ziemlich groß. Ich habe etwa 11 Dateien aus verschiedenen Tabellen, die bcp'd sind und aus dem nur eine Datei gezippt wurde, wenn Fehler ausgepackt wurden. Dies ist der Befehl, den ich erfolgreich verwendet habe. Vor kurzem habe ich (beim Versuch, eine Kopie des aktuellen WH anzulegen und den Prozess zu regeln) Probleme.

bcp.exe mitarbeiterdaten in mitarbeiter_details.dat -n -E -S "servername" -U sa -P "Kennwort"

Ich habe versucht, die Befehle in -C -T -S zu ändern, was funktionierte, als ich das Format manuell gab. Dies ist ein sehr großes und wichtiges Paket, das ich in mein WH laden muss.
Ich weiß nicht, ob ich hier eine Formatdatei sehe oder nicht. Jede Hilfe ist erforderlich. 

Vielen Dank

Zimtmädchen. 

10
cinnamon girl

Wir waren auch beim BCP mit demselben Problem konfrontiert und es stellte sich heraus, dass es ein Problem mit neuen Zeilenzeichen in der .dat-Datei war.

Zeigen Sie die Datei in Notepad ++ an und klicken Sie auf "Alle Zeichen anzeigen", um das neue Linienzeichen anzuzeigen.

File with LineFeed character

BCP löst den folgenden Fehler mit der Option -r "\ r\n" aus, d. H. Mit dem folgenden Befehl

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\r\n" -S "DBServerName" -T -E

"SQLState = 22001, NativeError = 0 Fehler = [Microsoft] [SQL Server Native Client 10.0] Zeichenfolgendaten, Rechtskürzung"

BCP behandelt alle Zeilen in der Datei als eine einzige Zeile mit der Option -r "\ n" oder -r "\ r", d. H. Mit dem folgenden Befehl

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\n" -S "DBServerName" -T -E

Problem wurde behoben, als wir den Haxadecimal-Wert (0x0a) für New Line-Zeichen im BCP-Befehl verwendet haben

bcp dbo.Test in C:\Test.dat -c -t "|" -r "0x0a" -S "DBServerName" -T -E
13
Mayank Jha

Für uns stellte sich heraus, dass die Datei, die wir hochzuladen versuchten, Unicode anstelle des ANSI-Formats war.

Es gibt einen -N-Schalter, aber unsere Tabellen hatten keine NVARCHAR-Daten.

Wir haben die Datei gerade im ANSI-Format gespeichert, und es hat funktioniert, aber wenn Sie über NVARCHAR-Daten verfügen, müssen Sie möglicherweise die Option -N verwenden

Siehe TechNet - Verwenden des nativen Unicode-Formats zum Importieren oder Exportieren von Daten

3
Charles Byrne

wenn Sie zu viele Daten in eine einzelne Spalte einfügen können, tritt ein bcp-Rechtsabschneidungsfehler auf. Dies kann durch falsche Formatdateien (falls verwendet) oder durch Trennzeichen. Das Zeilenendezeichen verwendet werden (Windows hat CRLF oder '\ r\n' und UNIX hat '\ n') kann diesen Fehler ebenfalls verursachen. Beispiel Ihre Formatdatei enthält Windows CRLF, dh '\ r\n' als Zeilenabschlusszeichen, aber die Datei enthält '\ n' als Zeilenende. Dies würde bedeuten, dass die gesamte Datei in eine Zeile (eher in eine Spalte) eingefügt wird, was zu einem Abschneidungsfehler nach rechts führt.

2
Sourav

Ich habe auch die Abschneidemeldung erhalten. Nach stundenlangem Durchsuchen von Foren und Ausprobieren von Lösungsvorschlägen konnte ich endlich meine Arbeit erledigen.

Der Grund für die Abschneidemeldung war, dass ich leichtgläubig genug war, um zu glauben, dass es wirklich wichtig war, den Spaltennamen in die Formatdatei zu setzen. Es ist die vorangegangene Zahl, die scheint zu bestimmen, wo die Daten geladen werden. 

Meine Eingabedatei hatte keine Daten für die dritte Spalte in der Tabelle. So sah meine Formatdatei aus.

... ","    1 Cust_Name       SQL_Latin1...
... ","    2 Cust_Ref        SQL_Latin1...
... ","    3 Cust_Amount     SQL_Latin1...
... "\r\n" 4 Cust_notes   SQL_Latin1...

Meine Eingabedatei sah so aus:

Jones,ABC123,200.67,New phone 
Smith,XYZ564,10.23,New SIM 

Der Tisch sah aus

Cust_Name Varchar(20)
Cust_Ref  Varchar(10)
Cust_Type Varchar(3)
Cust_amount Decimal(10,2)
Cust_Notes Varchar (50)
Cust_Tel   Varchar(15)
Cust......

Durch die Angabe des Spaltennamens in der Formatdatei habe ich angenommen, dass die Daten in die entsprechende Spalte der Tabelle übernommen werden.

Dies funktioniert jedoch, da die Spaltennummer wichtig ist und der Spaltenname Rauschen ist.

... ","    1 A       SQL_Latin1...
... ","    2 B       SQL_Latin1...
... ","    4 C       SQL_Latin1...
... "\r\n" 5 D       SQL_Latin1...
2
Joe

In meinem Fall lag der Grund darin, dass in einem Feld "|" = chr$(124) und in meinem Fall das Trennzeichen "|" = chr$(179) stand.

MS SQL soll zwischen beiden Zeichen keinen Unterschied machen. Ich habe die Funktion chr$(124) entfernt und dann funktioniert der Import von BCP einwandfrei.

1
Albert Unger

Öffnen Sie die Dateien in Notepad ++. Gehen Sie zur Registerkarte Ansicht -> Symbole anzeigen -> Alle Zeichen anzeigen. Das gleiche Problem hatte ich auch in .tsv-Dateien. Eine Registerkarte wurde falsch platziert.

0
Jitendra Rathor

Nach 4-stündigem Nachverfolgen und vielen Fehlern stellte ich fest, dass die Lösung so einfach sein kann wie die Tabelle, in die Sie die Daten importieren, und ein geeignetes Schema für die Datei haben sollte, die Sie importieren möchten. Ex: In meinem Fall. Ich habe eine .csv-Datei mit 667, aaa, bbb in eine Tabelle mit dem Schema int (4), char (2), char (2) importiert, was zu einem String geführt hat Daten, rechte Kürzung.

0
Chandu Rajasagi

Ich weiß, das ist alt - aber ich bin gerade auf eine Instanz gestoßen, in der ich diesen Fehler erhalten habe. Es stellte sich heraus, dass eines meiner numerischen Felder mehr Dezimalstellen enthielt, als durch das Schema zulässig war.

0
Chris

Spät aber trotzdem: In meinem Fall habe ich genau diesen bekommen

SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]String data, right truncation

Und das Problem war, dass sich das Schema geändert hat . Die Zieldatenbank hatte zwei neue Felder. Nachdem ich das vorherige Schema installiert hatte, war der Import erfolgreich.

0
Marcel