SQL Server-String oder Binärdaten würden abgeschnitten werden
Ich arbeite in einem Daten-Migrationsprojekt. Ich erhalte die folgende Fehlermeldung, wenn ich versuche, einfügen von Daten aus einer Tabelle in eine andere Tabelle (SQL Server 2005):
Msg 8152, Ebene 16, Status 13, Zeile 1
Zeichenfolgen-oder Binärdaten würden abgeschnitten werden.
Den Quelldaten die Spalten mit dem Datentyp übereinstimmen und sich innerhalb der Länge, die Definitionen der Zieltabelle Spalten, so bin ich ratlos, was könnte die Ursache dieses Fehlers.
Would you mind posting etwas code, und Informationen über jede Tabelle?
Die Tabellen sind beide Recht groß - also werde ich nur den Teil der Tabelle definintions, die beteiligt sind, und die code - ist das annehmbar?
Die Tabelle Definitionen und der code wäre toll.
Die Tabellen sind beide Recht groß - also werde ich nur den Teil der Tabelle definintions, die beteiligt sind, und die code - ist das annehmbar?
Die Tabelle Definitionen und der code wäre toll.
InformationsquelleAutor Jim Evans | 2011-06-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die post in der Tabelle Definitionen für die Quell-und Ziel-Tabellen für uns, um herauszufinden, wo das Problem ist aber die Quintessenz ist, dass eine der Spalten in der Quell-Tabelle ist größer als die Ziel-Spalten. Es könnte sein, dass Sie wechselnden Formaten in einer Weise, die Sie nicht bewusst waren. Das Datenbank-Modell, das Sie bewegt, ist wichtig, herauszufinden, dass heraus, so gut.
Hatte ich vor dem gleichen problem und musste vergleichen Sie alle Spalten-Typen und-Größen der beiden Tabellen um das Problem zu beheben.
Nach dem Gang durch die exeecise zu sammeln, die teilweise von Tabellendefinitionen und dann immer meine sproc code die problematische Spalte sprang mich wie ein Blitz... Danke allen für Ihre Eingabe.
Ich kann Ihnen nicht sagen, wie viele Male habe ich das gleiche getan. Froh, dass Sie in der Lage waren, Ihr Problem zu lösen.
Ich habe markiert du die erste Antwort als die Antwort, weil es war, was führte mich um die Antwort zu finden:)
InformationsquelleAutor IAmTimCorey
Das Problem ist ganz einfach: eine oder mehrere der Spalten in der Quell-Abfrage Daten enthält, überschreitet die Länge der Ziel-Spalte. Eine einfache Lösung wäre es, die nehmen Ihre source-query und execute
Max(Len( source col ))
auf jeder Spalte. I. e.,Dann vergleichen Sie die Längen der Datentyp Längen in deine Zieltabelle. Mindestens eine, übersteigt die Ziel-Spalte Länge.
Wenn Sie absolut positiv, dass dies nicht der Fall sein sollte und egal, wenn es nicht der Fall ist, dann eine andere Lösung ist die zwangsweise Besetzung der Quell-Abfrage Spalten an Ihren Bestimmungsort (die Länge, die abgeschnitten wird keine Daten, die zu lang ist):
Danke Thomas, das ist seltsam, auch habe ich keine Daten, das ist zu lange, ich habe noch zu wirken, um das neue Ziel-Spalte Größe, sobald ich wusste, dass es funktionierte.
InformationsquelleAutor Thomas
Wie andere schon gesagt haben, eines der Spalten-Datentypen, die in der Quell-Tabelle ist größer als die Ziel-Spalten.
Eine einfache Lösung ist, einfach deaktivieren Sie die Warnung und ermöglichen das abschneiden stattfinden. Also, wenn Sie Fehler erhalten, aber Sie sind sicher, es ist akzeptabel für die Daten in der alten Datenbank/Tabelle werden abgeschnitten (cut to size) können Sie einfach Folgendes tun;
Wie oben, immer daran denken, schalten Sie die Warnungen wieder ein danach. Ich hoffe, das hilft.
InformationsquelleAutor Rudi Kershaw
Einen anderen möglichen Grund für dieses ist, wenn Sie ein Standard setup-Wert für eine Spalte, überschreitet die Länge der Spalte. Es scheint jemand Fett Finger eine Spalte, die hatte eine Länge von 5, aber der default-Wert überschritten wird die Länge von 5. Dieser fuhr mich verrückt, als ich versuchte zu verstehen, warum es nicht funktioniert auf alle einfügen, auch wenn alle, die ich einfügen wurde war eine einzige Spalte mit einer ganzen Zahl von 1. Da der Standardwert auf dem Tisch-schema hatte, dass die Verletzung default-Wert es habe alles vermasselt - ich glaube, das bringt uns zu der Lektion - vermeiden, dass Tabellen mit default-Wert in das schema. 🙂
InformationsquelleAutor Brian
Für die anderen, auch überprüfen Sie Ihre gespeicherten Prozedur. In meinem Fall in meinen gespeicherten Prozedur
CustomSearch
ich versehentlich als nicht lang genug für meine Spalte, also wenn ich in ein big-data-erhielt ich diesen Fehler auch wenn ich eine große Länge auf meiner Datenbank. Ich habe gerade die Länge meiner Spalte auf meiner eigenen Suche nach dem Fehler geht Weg. Dies ist nur für die Erinnerung. Danke.InformationsquelleAutor bot
Dies kann eine schwierige Fehler. Hier sind einige Hinweise entnommen https://connect.microsoft.com/SQLServer/feedback/details/339410/ suchen AmirCharania Kommentar.
Habe ich angepasst, die Antwort AmirCharania für die ausgewählten Daten in eine tatsächliche Tabelle, anstatt eine temp. Wählen Sie zuerst das dataset in einer Entwicklung Tabelle führen Sie dann die folgenden:
Interessanterweise wurde das Thema wieder geöffnet unter einem etwas anderen Titel: feedback.azure.com/forums/908035-sql-server/suggestions/... und es ist schon gelistet als "Under Review", es gibt also Hoffnung noch nicht.
InformationsquelleAutor mcfea
Stieß ich heute dieses problem, und bei meiner Suche nach einer Antwort auf diese minimale informative Fehlermeldung, ich habe auch diesen link gefunden:
https://connect.microsoft.com/SQLServer/feedback/details/339410/please-fix-the-string-or-binary-data-would-be-truncated-message-to-give-the-column-name
So scheint es microsoft hat keine Pläne zu erweitern Fehlermeldung in absehbarer Zeit.
Also wendete ich mich anderen Mitteln.
Kopierte ich den Fehler in excel:
(1 Zeile(N) betroffen)
(1 Zeile(N) betroffen)
(1 Zeile(N) betroffen)
Msg 8152, Ebene 16, Status 14, Zeile 13
Zeichenfolgen-oder Binärdaten würden abgeschnitten werden.
Die Anweisung wurde beendet.
(1 Zeile(N) betroffen)
zählte die Anzahl der Zeilen in excel, habe in der Nähe der Datensätze Zähler, der das problem verursacht... meinen export-code, drucken Sie die SQL, um es zu schließen... dann lief die 5 - 10 sql INSERT, um das problem zu sql und konnte lokalisieren des Problems, siehe die Zeichenfolge, die zu lang war, erhöhen Sie die Größe der Spalte und dann die großen import-Datei ran, kein problem.
Bisschen ein hack und ein workaround, aber wenn Sie verlassen mit wenig Wahl, die Sie tun, was Sie können.
InformationsquelleAutor Shaakir
Ja,ich bin auch angesichts dieser Art von problem.
Hier habe ich ändern BEMERKUNGEN eingereicht Länge von 500 bis 1000
InformationsquelleAutor Thivan Mydeen
SQL Server 2019 wird endlich wieder mehr aussagekräftige Fehlermeldung.
Ermöglichen neue Verhalten, die Sie verwenden müssen
DBCC TRACEON(460)
. Neue Fehler-text aussys.messages
:Zeichenfolgen-oder Binärdaten würden abgeschnitten werden: austauschen der berüchtigte Fehler 8152
SQL Server 2017 CU12 auch diese Funktion unterstützt.
Verbesserung: Optional Ersatz für "Zeichenfolgen-oder Binärdaten würden abgeschnitten werden" - Meldung mit erweiterten Informationen in der SQL Server-2017
db<>fiddle-demo
InformationsquelleAutor Lukasz Szozda
kann dies auch passieren, wenn Sie nicht über ausreichende Berechtigungen
InformationsquelleAutor Biscuit128
Habe ich aufgebaut eine gespeicherte Prozedur, die Analysen einer Quelltabelle oder-Abfrage mit mehreren Merkmalen pro Spalte unter der die minimale Länge (min_len) und die maximale Länge (max_len).
Speicher ich diese Prozedur in der master-Datenbank, so dass ich es verwenden können in jeder Datenbank so:
Und die Ausgabe ist:
column description constraint_type fk_table fk_column pos default null data_type length precision radix is_unique min_len max_len nulls blanks numerics distincts distinct_values remarks
id_individual NULL PRIMARY KEY NULL NULL 1 NULL NO int NULL 10 10 1 1 2 0 0 70 70 Many (70) unique,all numeric,
id_brand NULL NULL NULL NULL 2 NULL NO int NULL 10 10 0 1 1 0 0 70 2 2,3 same length,all numeric,
guid NULL NULL NULL NULL 3 (newid()) NO uniqueidentifier NULL NULL NULL 1 36 36 0 0 0 70 Many (70) unique,same length,
customer_id NULL NULL NULL NULL 4 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
email NULL NULL NULL NULL 5 NULL YES varchar 100 NULL NULL 0 4 36 0 0 0 31 Many (31)
mobile NULL NULL NULL NULL 6 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
initials NULL NULL NULL NULL 7 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
title_short NULL NULL NULL NULL 8 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
title_long NULL NULL NULL NULL 9 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
firstname NULL NULL NULL NULL 10 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
lastname NULL NULL NULL NULL 11 NULL YES varchar 50 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
address NULL NULL NULL NULL 12 NULL YES varchar 100 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
pc NULL NULL NULL NULL 13 NULL YES varchar 10 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
kixcode NULL NULL NULL NULL 14 NULL YES varchar 20 NULL NULL 0 NULL NULL 70 0 0 0 NULL all null,empty,
date_created NULL NULL NULL NULL 15 (getdate()) NO datetime NULL NULL NULL 1 19 19 0 0 0 70 Many (70) unique,same length,
created_by NULL NULL NULL NULL 16 (user_name()) NO varchar 50 NULL NULL 0 13 13 0 0 0 1 loyalz-public same length,
id_location_created NULL FOREIGN KEY location id_location 17 NULL YES int NULL 10 10 0 1 1 0 0 70 2 1,2 same length,all numeric,
id_individual_type NULL FOREIGN KEY individual_type id_individual_type 18 NULL YES int NULL 10 10 0 NULL NULL 70 0 0 0 NULL all null,empty,
optin NULL NULL NULL NULL 19 NULL YES int NULL 10 10 0 1 1 39 0 31 2 0,1 same length,
sp_
Präfix für Ihre gespeicherten Prozeduren. Microsoft hat vorbehalten, die mit einem Präfix für den eigenen Gebrauch (siehe Benennen von Gespeicherten Prozeduren), und Sie laufen Gefahr, einen name-clash-irgendwann in der Zukunft. Es ist auch schlecht für die gespeicherte Prozedur performance. Es ist am besten, einfach zu vermeidensp_
und verwenden Sie etwas anderes als ein Präfix - oder kein Präfix!InformationsquelleAutor Christiaan Westerbeek
Werde ich hinzufügen, eine andere mögliche Ursache für diesen Fehler gerade, denn niemand hat es erwähnt, und es könnte helfen, einige zukünftige person (seit der OP gefunden hat, seine Antwort). Wenn die Tabelle, die Sie einfügen in hat Trigger, könnte es der Auslöser ist, der den Fehler generiert. Ich habe gesehen, das passiert, wenn die Tabelle Feld-Definitionen wurden geändert, aber die audit-Tabellen wurden nicht.
InformationsquelleAutor HLGEM
Yep - "ein pint in einem half-pint pot wird nicht gehen". Ich habe nicht hatte vieles Glück (aus welchem Grund auch immer) mit den verschiedenen SPs, die Leute vorgeschlagen haben, ABER solange die beiden Tabellen in der gleichen DB (oder können Sie Sie in der gleichen DB), die Sie verwenden können, INFORMATION_SCHEMA.SPALTEN zu, suchen Sie das fehlerhafte Feld(s), folgendermassen:
Dies wird Ihnen erlauben, nach oben und unten scrollen, vergleichen Feldlängen, wie Sie gehen. Die kommentierte Abschnitte sehen lassen (einmal unkommentiert, natürlich), wenn es Daten Typ Unterschiede, oder speziell jene zeigen, die sich im Feld Länge - denn ich bin zu faul zum scrollen - nur bewusst sein, dass das ganze Ding basiert auf der source-Spalte Namen, die mit denen des Ziels.
InformationsquelleAutor Kevin Anderson
War ich mit leere Zeichenfolge "auf eine Tabelle anzulegen und dann die Fehlermeldungen" Msg 8152, Zeichenfolgen-oder Binärdaten würden abgeschnitten werden' auf nachfolgenden update. Dies geschah aufgrund der update-value mit 6 Zeichen und grösser als die definition für die Spalte erwartet. Ich benutzte "RAUM" zu bekommen, um dieses auch nur, weil ich wusste, ich würde die Aktualisierung in der Masse, nach der ersten Daten-Erzeugung, d.h. die Spalte war nicht zu lange leer.
SO GROßER NACHTEIL HIER: Dies ist nicht eine besonders glatten Lösung, aber ist nützlich in den Fällen, in denen Sie gemeinsam an einem Strang ziehen ein Daten-set z.B. für one-off-intelligence-Anforderungen, bei denen Sie erstellen eine Tabelle für das data-mining, die Anwendung einiger bulk-Verarbeitung/interpretation und Speicherung vor und nach Ergebnisse zum späteren Vergleich/Bergbau. Dies ist eine häufige Erscheinung in meiner Linie der Arbeit.
Können Sie zunächst füllen mit LEERZEICHEN keyword d.h.
Nachfolgenden updates "column_name" von 10 Zeichen oder weniger (als Ersatz vorhanden) wird dann erlaubt sein, ohne dass truncate Fehler. Wieder, ich würde Sie nur verwenden, diese in Szenarien, ähnlich wie beschrieben, in mein VORBEHALT.
InformationsquelleAutor Hilary
Hatte ich ein ähnliches Problem. Ich war kopieren von Daten von einer Tabelle in eine identische Tabelle, in der alles, aber Namen.
Schließlich ausgegeben ich die Quell-Tabelle in eine temporäre Tabelle mit einer SELECT INTO-Anweisung.
Ich im Vergleich das schema der Quell-Tabelle die temporäre Tabelle. Ich fand einer der Säulen war eine
varchar(4000)
wenn ich hatte erwartet, einevarchar(250)
.UPDATE:
Der varchar(4000) Problem werden kann, erklärt hier, falls es Sie interessiert:
Für Nvarchar(Max) ich bin immer nur 4000 Zeichen in TSQL?
Hoffe, das hilft.
InformationsquelleAutor warren banks
Dieser Fehler wird ausgelöst, wenn die Spalte einer Tabelle stellt constraint [ meist Länge ]. . E. g. wenn Datenbank-schema für die Spalte myColumn ist CHAR(2), dann, wenn Ihr Anruf von einem Ihrer Anwendung legen Sie Wert, Sie müssen übergeben Sie String der Länge zwei.
Den Fehler im Grunde sagt es; string der Länge drei und oben ist inkonsistent, passen Sie die Länge die angegebene Einschränkung von Datenbank-schema. Das ist, warum SQL Server warnt, und wirft Datenverlust/Fehler beim streichen.
InformationsquelleAutor Yergalem
Hier ist eine etwas andere Antwort. Die Spaltennamen & Längen können alle passen, aber vielleicht sind Sie der Angabe der Spalten in der falschen Reihenfolge in der SELECT-Anweisung. Sagen tableX und tableY, die Spalten mit dem gleichen Namen, aber in unterschiedlicher Reihenfolge
InformationsquelleAutor SoloPilot
Versuchen Sie bitte den folgenden code:
InformationsquelleAutor arnav
Schrieb ich eine nützliche Prozedur speichern, zu identifizieren und zu lösen das problem der text abschneiden (String oder Binärdaten würden abgeschnitten werden), wenn die INSERT-SELECT-Anweisung verwendet wird. Sie vergleicht die Felder CHAR, VARCHAR, NCHAR UND NVARCHAR nur und gibt eine Bewertung Feld für Feld in Fall, dass Sie die mögliche Ursache des Fehlers.
FUNKTION CODE:
Für jetzt unterstützt nur die Datentypen CHAR -, VARCHAR -, NCHAR-und NVARCHAR -. Sie können finden, dass der Letzte versión dieser code in der nächsten link unten, und wir helfen uns gegenseitig, um es zu verbessern. GetFieldStringTruncate.sql
https://gist.github.com/jotapardo/210e85338f87507742701aa9d41cc51d
InformationsquelleAutor JotaPardo