|
|
String or binary data would be truncated- #2047 in section [742150] |
Sec: |
(16) MS SQL C/S |
Von: |
Bernhard Sander |
An: |
Harro Schippan |
Am/Um: |
05.07.2019 13:28:05 gelesen |
Hallo Harro, |
Hallo zusammen, wenn ich mit SQLEXEC() einen UPDATE oder INSERT mache und dabei Feldinhalte zu lang sind, bekommt man die Meldung "String or binary data would be truncated". Warum erzählt einem die Meldung nicht, mit welchem Feld das Problem besteht? Dann geht die elende Sucherei los. Dabei quäle ich mich seit Jahren um das betreffende Feld zu finden. Gibt es eine Methode um das Feld schnell zu identifizieren?
|
Wie Christian schon schrieb gibt es in neueren SQL-Server-Versionen eine erweiterte Fehlermeldung, die auch das betroffene Feld ausgibt, siehe auch hier: https://feedback.azure.com/forums/908035-sql-server/suggestions/32908417-binary-or-string-data-would-be-truncated-error Anscheinend muss man aber auch noch einen Schalter am SQL-Server umstellen. Dazu mehr in https://blogs.msdn.microsoft.com/sql_server_team/string-or-binary-data-would-be-truncated-replacing-the-infamous-error-8152/ "You need to enable trace flag 460" Bei handgemachten SQL-Befehlen hilft vielleicht diese Idee: Gelegentlich liefert die Fehlermeldung auch einen Hinweis auf die betroffene Zeile (Weiß grad nicht genau, ob dieser Zeilenverweis auch via ODBC geliefert wird. Schau Dir die Fehlermeldung nochmal genau an.) Das kann man ausnutzen, indem man den SQL-Befehl in mehrere Zeilen umbricht und nicht als Einzeiler abschickt. Wenn man für jedes betroffene Feld eine eigene Zeile verwendet, kann man die Stelle leicht durch abzählen finden. statt: INSERT INTO tabelle (feld1, feld2) VALUES (wert1, wert2) akzeptiert jeder SQL-Server (nicht bloß der von Microsoft) auch: INSERT INTO tabelle ( feld1, feld2 ) VALUES ( wert1, wert2 ) Gruß Bernhard Sander
|
|
|
|