Warum kann SQL Server mir nicht mitteilen, welche Spalte den Fehler verursacht?

9

Ich habe einen schönen Standard

%Vor%

und ich erhalte den folgenden Fehler:

  

Nachricht 245, Ebene 16, Status 1, Zeile 1
  Die Konvertierung ist fehlgeschlagen, wenn der Varchar-Wert 'NULL' in den Datentyp int.

konvertiert wurde

Ich verstehe den Fehler, möchte jedoch wissen, warum die Spalte, die das Problem verursacht, nicht durch die Fehlermeldung identifiziert wird. Gibt es einen einfachen Weg, um herauszufinden, in welcher Spalte sich der Naughty Null befindet, oder ist das nur ein Trick, um mich so aussehen zu lassen, als wäre ich produktiv, während ich nur 30 Minuten lang eine riesige Ergebnismenge betrachte, ohne irgendwohin zu kommen? p>

Edit: Danke für die Hilfe Jungs, aber niemand hat wirklich die Frage beantwortet. Reichen alle RDBMS ähnliche Fehlermeldungen aus oder sind sie hilfreicher? Sein 2012 ... Versuch und Irrtum über möglicherweise Tausenden Spalten sollte tot sein!

    
woggles 26.03.2012, 19:44
quelle

3 Antworten

4

Ich würde mir ansehen, wie Sie die temporäre Tabelle auffüllen. Sie scheinen einen Wert von "null" und nicht NULL zu erhalten. Wenn diese Daten aus einer Excel-Datei stammen, ist dies ein häufiges Problem. Normalerweise lösche ich die Daten zuerst, indem ich diesen Weg aktualisiere:

%Vor%

Wenn Sie alle im selben Update-Befehl ausführen möchten, dann

%Vor%     
HLGEM 26.03.2012, 20:02
quelle
1

Es sollte nicht 30 Minuten dauern, um herauszufinden, wo die Null ist. Sie haben nur so viele Spalten. Beginnen Sie einfach mit der Auswahl von #temp WHERE col1 ist NULL, dann WHERE col2 ist.

Wenn #temp eine VARCHAR-Spalte hat, die Sie in die INT-Spalte einfügen wollen, dann werfen Sie sie. Wenn NULLEN vorhanden sind, können Sie sie mit einem CAST (ISNULL (VarCharColumn, '0') AS INT) oder etwas behandeln. Wenn eine INT-Spalte NULL erlaubt, sollte nur die Umwandlung in INT ausreichen (solange alle Werte NULL oder ein gültiges int sind).

Wenn Sie Ihre INSERT mit etwas mehr Sorgfalt schreiben, dann sollten Sie in der Lage sein, die gewünschten Ergebnisse zu erhalten.

    
Jeremy Pridemore 26.03.2012 19:50
quelle
0

Sie werden einige Versuche und Fehler brauchen, wie @ Jeremy es ausdrückte. Aber Sie können die Wahl abwägen.

Die Fehlermeldung besagt, dass das Problem ein NULL in einer Varchar-Spalte ist. Sie können Ihre Suche auf nur die Varchar-Spalten in #temp: select * from #temp where col1 is null or col3 is null

beschränken

Zweitens tritt das Problem auch auf, wenn das Datenbankmodul versucht, einen Null-VARCHAR-Wert in ein integer not null zu konvertieren. Vergleichen Sie die Definitionen beider Tabellen, um zu sehen, wo ein varchar in #temp mit einem integer not null in der anderen Tabelle übereinstimmt.

Dies ist jedoch verdächtig. Warum versuchen Sie, Text in Zahlen zu konvertieren? Wenn Sie das wirklich tun möchten, benötigen Sie wahrscheinlich eine explizite Umwandlung von textuell nach numerisch.

    
Barry Brown 26.03.2012 20:11
quelle

Tags und Links