Ich habe eine gespeicherte Prozedur, die 650 Felder in eine Tabelle einfügt. Das Einfügen schlägt mit einem Kürzungsfehler fehl.
Es ist einfach
INSERT INTO
SELECT (a bunch of fields)
FROM (a bunch of tables)
Unten ist die Fehlermeldung:
Nachricht 8152, Ebene 16, Status 14, Prozedur DSP_Procedure, Zeile 1075 Zeichenfolge oder Binärdaten werden abgeschnitten.
Gibt es eine schnelle Möglichkeit, um festzustellen, welches Feld den Kürzungsfehler verursacht?
Die Tatsache, dass die in die Tabelle einzufügende select-Anweisung 650 Felder enthält, macht es schwierig, genau zu bestimmen, welches Feld den Kürzungsfehler verursacht.
Ich denke, ich kann vielleicht Feldblöcke gleichzeitig auskommentieren, damit der SP jeweils nur 100 Felder einfügt und dann den SP 6 oder 7 verschiedene Male ausführt, bis ich mich zumindest auf eine Gruppe von 100 Feldern eingrenzen kann Das enthält das Feld, das den Kürzungsfehler verursacht.
Alternativ denke ich, dass ich vielleicht nur SELECT INTO
eine neue Tabelle erstellen und dann die Datenlängen in der Tabelle mit den Datenlängen der Zieltabelle vergleichen kann, in die ich in meinen SP einfügen möchte, um festzustellen, welches Feld eine längere als erwartete Feldlänge enthält. ..
Ich verwende SQL Server 2014.
Irgendwelche einfacheren Alternativen?
quelle
Antworten:
Wenn Sie mit SQL Server 2016 (SP2, CU6 oder neuer) arbeiten, können Sie das Ablaufverfolgungsflag 460 aktivieren, z
(QUERYTRACEON 460)
. Die Ausgabe zeigt die Spalte und die fehlerhaften Daten an.Weitere Informationen finden Sie in diesem Artikel. https://www.brentozar.com/archive/2019/03/how-to-fix-the-error-string-or-binary-data-would-be-truncated/
Wenn Sie sich nicht für die Kürzung interessieren, können Sie
SET ANSI_WARNINGS OFF
diese Art der Kürzung ignorieren.quelle
Leider sind Sie auf ein ziemlich altes "Feature" gestoßen . Seit 2008 ist ein Connect-Ticket geöffnet, und seit fast zehn Jahren ist dies nicht mehr signifikant genug, um eine Korrektur zu rechtfertigen.
Die Standardumgehung besteht, wie Sie sich vorgestellt haben, darin
select into...
, Tabellenmetadaten zu vergleichen. Eine andere Möglichkeit ist die binäre Suche in der betreffenden Spalte, aber das ist auch manuelle Arbeit. Es gibt einige Hacks für den Metadatenvergleich, aber eine einfache, elegante Lösung gibt es nicht. Vielleicht wären einige Tools von Drittanbietern hilfreich, aber mir sind solche nicht bekannt.quelle
Die Verwendung von (QUERYTRACEON 460) hat bei mir am Ende meiner Abfrage nicht funktioniert.
Ich habe es auf DB-Ebene eingeschaltet und es hat funktioniert:
Schalten Sie es jedoch wieder aus, sobald Sie das Problem gefunden und behoben haben. Lassen Sie es nicht eingeschaltet!
quelle