Ich führe die Datei data.bat mit den folgenden Zeilen aus:
Rem Tis batch file will populate tables
cd\program files\Microsoft SQL Server\MSSQL
osql -U sa -P Password -d MyBusiness -i c:\data.sql
Der Inhalt der Datei data.sql lautet:
insert Customers
(CustomerID, CompanyName, Phone)
Values('101','Southwinds','19126602729')
Es gibt 8 weitere ähnliche Zeilen zum Hinzufügen von Datensätzen.
Wenn ich dies mit laufen start
> run
> cmd
> c:\data.bat
, erhalte ich diese Fehlermeldung:
1>2>3>4>5>....<1 row affected>
Msg 8152, Level 16, State 4, Server SP1001, Line 1
string or binary data would be truncated.
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
Ich bin natürlich auch ein Neuling, aber was tun Level #
und state #
bedeuten und wie suche ich nach Fehlermeldungen wie der oben genannten: 8152?
quelle
Firstname nvarchar(5)
Wenn Sie mehr als 5 Zeichen einfügen, erhalten Sie den FehlerIch hatte dieses Problem, obwohl die Datenlänge kürzer als die Feldlänge war. Es stellte sich heraus, dass das Problem darin bestand, dass eine andere Protokolltabelle (für den Prüfpfad) mit einem Trigger in der Haupttabelle gefüllt war, in der auch die Spaltengröße geändert werden musste.
quelle
In einer der
INSERT
Anweisungen versuchen Sie, eine zu lange Zeichenfolge in eine Zeichenfolge (varchar
odernvarchar
) -Spalte einzufügen .Wenn es nicht
INSERT
durch einen Blick auf das Skript offensichtlich ist, welcher der Täter ist, können Sie die<1 row affected>
Zeilen zählen, die vor der Fehlermeldung auftreten. Die erhaltene Nummer plus eins gibt Ihnen die Anweisungsnummer. In Ihrem Fall scheint es das zweite INSERT zu sein, das den Fehler erzeugt.quelle
Einige Ihrer Daten passen nicht in Ihre Datenbankspalte (klein). Es ist nicht leicht zu finden, was falsch ist. Wenn Sie C # und Linq2Sql verwenden, können Sie das Feld auflisten, das abgeschnitten werden würde:
Erstellen Sie zuerst eine Hilfsklasse:
Bereiten Sie dann den Wrapper für SubmitChanges vor:
Bereiten Sie Details zum globalen Ausnahmebehandler und zum Abschneiden von Protokollen vor:
Verwenden Sie zum Schluss den Code:
quelle
Ich möchte nur mit zusätzlichen Informationen beitragen: Ich hatte das gleiche Problem und es war, weil das Feld nicht groß genug für die eingehenden Daten war und dieser Thread mir half, es zu lösen (die oberste Antwort verdeutlicht alles).
ABER es ist sehr wichtig zu wissen, was die möglichen Gründe sind, die es verursachen können.
In meinem Fall habe ich die Tabelle mit einem Feld wie dem folgenden erstellt:
Daher hatte das Feld "Periode" eine Länge von Null und führte dazu, dass die Einfügevorgänge fehlschlugen. Ich habe es in "XXXXXX" geändert, das ist die Länge der eingehenden Daten und es hat jetzt richtig funktioniert (weil das Feld jetzt eine Länge von 6 hatte).
Ich hoffe das hilft jedem mit dem gleichen Problem :)
quelle
Eine andere Situation, in der Sie diesen Fehler erhalten können, ist die folgende:
Ich hatte den gleichen Fehler und der Grund war, dass in einer INSERT-Anweisung, die Daten von einer UNION erhielt, die Reihenfolge der Spalten von der ursprünglichen Tabelle abweicht. Wenn Sie die Reihenfolge in # table3 in a, b, c ändern, wird der Fehler behoben.
quelle
Auf einem SQL Server können Sie SET ANSI_WARNINGS OFF folgendermaßen verwenden:
quelle
Ich hatte das gleiche Problem. Die Länge meiner Kolumne war zu kurz.
Sie können entweder die Länge erhöhen oder den Text verkürzen, den Sie in die Datenbank einfügen möchten.
quelle
Auch dieses Problem trat auf der Webanwendungsoberfläche auf. Schließlich stellte sich heraus, dass dieselbe Fehlermeldung von der SQL-Aktualisierungsanweisung in der spezifischen Tabelle stammt.
Schließlich stellte sich heraus, dass die Spaltendefinition in den zugehörigen Verlaufstabellen
nvarchar
in einigen bestimmten Fällen nicht die ursprüngliche Tabellenspaltenlänge der Typen abbildete .quelle
Ich hatte das gleiche Problem, auch nachdem ich die problematischen Spalten in der Tabelle vergrößert hatte.
tl; dr: Die Länge der übereinstimmenden Spalten in den entsprechenden Tabellentypen muss möglicherweise ebenfalls erhöht werden.
In meinem Fall kam der Fehler vom Datenexportdienst in Microsoft Dynamics CRM, mit dem CRM-Daten mit einer SQL Server-Datenbank oder einer Azure SQL-Datenbank synchronisiert werden können.
Nach einer langen Untersuchung kam ich zu dem Schluss, dass der Datenexportdienst tabellenwertige Parameter verwenden muss :
Wie Sie in der obigen Dokumentation sehen können, werden Tabellentypen verwendet, um das Datenaufnahmeverfahren zu erstellen:
Leider gibt es keine Möglichkeit, einen Tabellentyp zu ändern, sodass er gelöscht und vollständig neu erstellt werden muss. Da meine Tabelle über 300 Felder (😱) enthält, habe ich eine Abfrage erstellt, um die Erstellung des entsprechenden Tabellentyps basierend auf der Spaltendefinition der Tabelle zu erleichtern (ersetzen
[table_name]
Sie sie einfach durch den Namen Ihrer Tabelle):Nach dem Aktualisieren des Tabellentyps funktionierte der Datenexportdienst wieder ordnungsgemäß! :) :)
quelle
Als ich versuchte, meine gespeicherte Prozedur auszuführen, hatte ich das gleiche Problem, da die Größe der Spalte, in der ich einige Daten hinzufügen muss, kürzer ist als die Daten, die ich hinzufügen möchte.
Sie können den Spaltendatentyp vergrößern oder die Länge Ihrer Daten verringern.
quelle
Eine andere Situation, in der dieser Fehler auftreten kann, ist in SQL Server Management Studio. Wenn Ihre Tabelle "Text" - oder "ntext" -Felder enthält, unabhängig davon, welche Art von Feld Sie aktualisieren (z. B. Bit oder Ganzzahl). Es scheint, dass das Studio nicht ganze "ntext" -Felder lädt und statt des geänderten auch ALLE Felder aktualisiert. Um das Problem zu lösen, schließen Sie die Felder "Text" oder "ntext" von der Abfrage in Management Studio aus
quelle
Kevin Popes Kommentar unter der akzeptierten Antwort war das, was ich brauchte.
In meinem Fall bestand das Problem darin, dass in meiner Tabelle Trigger definiert waren, die Aktualisierungs- / Einfügungstransaktionen in eine Prüftabelle einfügen, die Prüftabelle jedoch eine Datentypinkongruenz aufwies, bei der eine Spalte mit
VARCHAR(MAX)
in der ursprünglichen Tabelle wieVARCHAR(1)
in der Tabelle gespeichert wurde Audit-Tabelle, daher schlugen meine Trigger fehl, wenn ich etwas Größeres alsVARCHAR(1)
in die ursprüngliche Tabellenspalte einfügte und diese Fehlermeldung erhielt.quelle
Ich habe eine andere Taktik angewendet, Felder, denen an einigen Stellen 8 KB zugewiesen sind. Hier werden nur ca. 50/100 verwendet.
Ich wollte Geschwindigkeit, da ich insgesamt 1 Million Datensätze habe und 28 KB davon lade.
quelle