2010-07-01 32 views
8

Ich habe eine riesige INSERT -Statement mit 200 Spalten und plötzlich bekomme ich die gefürchtete . Kann ich irgendwo die tatsächliche Spalte sehen, die den Wert "varchar" enthält? Ich weiß, dass ich eine der Spalten auf einmal entfernen kann, bis der Fehler verschwindet, aber es ist sehr mühsam."Fehler beim Konvertieren des Datentyps varchar in numerisch." - Welche Spalte?

+4

Sie könnten die Hälfte der Spalten gleichzeitig auskommentieren; immer noch langweilig, aber schneller. –

Antwort

5

Sie geben keine SQL Server-Version oder Anzahl der Zeilen an.

Für SQL2005 + Hinzufügen der OUTPUT-Klausel der INSERT könnte helfen, in den Schurken Reihe zu identifizieren, dass es wird geben die eingefügten Zeilen, bis ein Fehler auftritt, so dass die nächste Zeile die mit dem Problem ist

DECLARE @Source TABLE 
(
Col1 VARCHAR(10), 
Col2 VARCHAR(10) 
) 

INSERT INTO @Source 
SELECT '1','1' UNION ALL 
SELECT '2','2' UNION ALL 
SELECT '3','3' UNION ALL 
SELECT '4A','4' UNION ALL 
SELECT '5','5' 


DECLARE @Destination TABLE 
(
Col1 INT, 
Col2 VARCHAR(10) 
) 

INSERT INTO @Destination 
OUTPUT inserted.* 
SELECT * 
FROM @Source 

Returns

 
    (5 row(s) affected) 
    Col1  Col2 
    ----------- ---------- 
    1   1 
    2   2 
    3   3 
    Msg 245, Level 16, State 1, Line 23 
    Conversion failed when converting the varchar value '4A' to data type int. 
+0

Niemals zuvor OUTPUT bei INSERT versucht. Vielen Dank! – Espo

0

Nun, das ist nur eine Ahnung, aber was ist mit dem Einfügen der Daten in eine temporäre Tabelle und die Verwendung der GUI, um die Daten auf die andere Tabelle zu migrieren? Wenn es immer noch einen Fehler erzeugt, sollten Sie zumindest in der Lage sein, mehr Feedback zu diesen nicht-numerischen Spalt zu bekommen ...

Wenn es nicht funktioniert, prüfen, versuchen this.

Prost!

6

Leider ist dieser Fehler ein ernster Schmerz und es gibt keinen einfachen Weg zur Fehlerbehebung. Wenn ich es in der Vergangenheit gesehen habe, musste ich immer nur Gruppen von Kolumnen kommentieren, bis ich den Schuldigen gefunden habe.

Ein anderer Ansatz könnte die Verwendung der ISNUMERIC() - Funktion in T-SQL sein, um zu versuchen, den Schuldigen zu finden. jede Spalte in der Zieltabelle Unter der Annahme, numerisch ist (entsprechend anpassen, wenn es nicht ist), könnten Sie dies versuchen:

SELECT * 
    FROM SourceTable 
WHERE ISNUMERIC(Column1) = 0 
    OR ISNUMERIC(Column2) = 0 
    OR ISNUMERIC(Column3) = 0 
    OR ISNUMERIC(Column4) = 0 
    ... 

Dies wird die Reihe aussetzen, die Sie nicht-numerischen Wert enthält, und sollte es ziemlich klar machen, welche Spalte es ist in. Ich weiß, es ist langweilig, aber zumindest hilft es Ihnen, den tatsächlichen Wert zu suchen, zusätzlich zu der Spalte, die Probleme verursacht.

Verwandte Themen