SQL-Fehler - varchar numeric
Ich importierte ein flat file in eine SQL-Datenbank und erstellt alle Felder als varchar(50). Ich war in der Lage, ändern Sie den Datentyp der meisten Felder, traf aber einen Fehler in der Gewicht-Feld. Alle Daten in das Feld Gewicht ist weniger als 6 Zeichen in der Länge und ist entweder eine ganze Zahl oder eine Dezimalzahl. Ich habe beide ausprobiert:
UPDATE MAWB
SET Weight = CAST(Weight AS decimal(12,2))
und:
ALTER TABLE MAWB
ALTER COLUMN [Weight] decimal(10,2)
Ich bekomme immer den Fehler: Fehler beim konvertieren von Datentyp varchar in numeric.
Habe ich überprüft, dass alle Felder als numerisch mit:
SELECT COUNT(*)
FROM MAWB
WHERE ISNUMERIC(Weight) = 0
Habe ich auch versucht, LTRIM und RTRIM nur um sicher zu sein, aber bekomme immer noch die Fehlermeldung, wenn ich versuche, ändern Sie das Feld. Weiß jemand was es sonst sein könnte, der diesen Fehler verursacht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie die beanstandeten Zeilen mit dieser Abfrage:
So,
ISNUMERIC()
ist bei weitem nicht perfekt. Es kann true zurückgegeben, für die Werte wiee
,$
, '€' und tab, und viele andere, die Sie nicht erwarten würden. Aber natürlich kann man nicht konvertieren Sie diese zu jedem numerischen Typ (ISNUMERIC()
identifiziert lediglich, dass es umgesetzt werden kann, um mindestens einen der numerischen Typen).LTRIM()
undRTRIM()
wird nicht helfen, weil Sie sich nicht klar tab und andere ähnliche Zeichen.Um Zeilen zu identifizieren, die wirklich nicht numerisch ist:
Oder schreiben Sie eine ausführlichere Skalare Funktion, wie in dem link oben, die Griffe mehr Grenzfälle:
Nachdem Sie ermittelt haben, diese Zeilen, und befestigte Sie die Daten, bitte, bitte, bitte korrigieren Sie die Tabelle auch.