Nein, es wird nirgendwo protokolliert. Wählen Sie und geben Sie Ihren Geschäftsgrundsatz an. Dies ist eine in der langen Liste der Dinge, die in SQL Server behoben werden sollten.
Dies wurde vor Jahren bei Connect angefordert (wahrscheinlich zuerst im Zeitrahmen von SQL Server 2000 oder 2005), dann erneut beim neuen Feedback-System:
Und jetzt wurde es in SQL Server 2019 , SQL Server 2017 CU12, ausgeliefert und wird in einer zukünftigen SQL Server 2016 SP2-CU angezeigt.
Im allerersten öffentlichen CTP von SQL Server 2019 wird es nur unter dem Ablaufverfolgungsflag 460 angezeigt. Dies klingt geheim, wurde jedoch in diesem Microsoft-Whitepaper veröffentlicht . Dies ist das Standardverhalten (kein Ablaufverfolgungsflag erforderlich), obwohl Sie dies über eine neue Konfiguration mit Datenbankbereich steuern können VERBOSE_TRUNCATION_WARNINGS
.
Hier ist ein Beispiel:
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
Ergebnis in allen unterstützten Versionen vor SQL Server 2019:
Meldung 8152, Ebene 16, Status 30, Zeile 5
Zeichenfolge oder Binärdaten werden abgeschnitten.
Die Anweisung wurde beendet.
Jetzt auf SQL Server 2019-CTPs mit aktiviertem Ablaufverfolgungsflag:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
Das Ergebnis zeigt die Tabelle, die Spalte und den Wert ( abgeschnitten , nicht voll ):
Meldung 2628, Ebene 16,
Status 1, Zeile 11
Zeichenfolge oder Binärdaten werden in Tabelle 'tempdb.dbo.x', Spalte 'a' abgeschnitten. Verkürzter Wert: 'f'.
Die Anweisung wurde beendet.
Bis Sie alles löschen und auf SQL Server 2019 aktualisieren oder auf Azure SQL-Datenbank umsteigen können, können Sie Ihren "automagic" -Code so ändern, dass er die max_length sys.columns
zusammen mit dem Namen, den Sie ohnehin erhalten müssen, abruft und dann LEFT(column, max_length)
oder anwendet was auch immer PGs Äquivalent ist. Oder, da dies nur bedeutet, dass Sie stillschweigend Daten verlieren, ermitteln Sie, welche Spalten nicht übereinstimmen, und korrigieren Sie die Zielspalten so, dass sie zu allen Daten aus der Quelle passen. Angesichts des Metadatenzugriffs auf beide Systeme und der Tatsache, dass Sie bereits eine Abfrage schreiben, die automatisch mit den Quell-> Zielspalten übereinstimmen muss (andernfalls wäre dieser Fehler kaum Ihr größtes Problem), sollten Sie keine grobe Gewalt anwenden müssen überhaupt erraten.
sys.columns
da ich absolut keine Ahnung hatte, welchen Code Sie derzeit verwenden, um Ihre Abfragen "automatisch" zu generieren. Es gibt wirklich nicht viel komplexer, als ich es mir vorstellen könnteSELECT name, object_id, max_length FROM sys.columns;
. Da Sie bereits automagischen Code haben, der dies tun muss - oder so ähnlich -, habe ich nicht gedacht, dass ein Beispiel notwendig ist.sys.columns
das mit zwei Spalten funktioniert, die das gleiche habenname
. Außerdem habe ich das Ding über die Bibliothek zum Laufen gebracht, anstattsys
warum sollte ich das als die gewählte Antwort machen?Microsoft SQL doesn't have x, do y instead
ist ein gültiger Beitrag, aber wenn Ihry
meinem unterlegen ist, werdey
ich etwas anderes tun und es als ausgewählt markieren.Schließlich hat Microsoft beschlossen, aussagekräftige Informationen für den
String or binary would be truncated
Start von SQL Server 2016 SP2 CU, SQL Server 2017 CU12 und in SQL Server 2019 bereitzustellen.Die Informationen enthalten jetzt sowohl die Spalte der beleidigenden Tabelle (vollqualifizierter Name) als auch den beleidigenden Wert (abgeschnitten auf 120 Zeichen):
quelle