Wenn Sie die SQL Server-Fehlermeldung 8114 erhalten, die so etwas wie Fehler beim Konvertieren des Datentyps varchar in numerisch lautet , liegt es wahrscheinlich daran, dass Sie versuchen, eine Datentypkonvertierung durchzuführen, die fehlschlägt, weil der Wert nicht in den Zieltyp konvertiert werden kann.
Es liegt nicht daran, dass Sie diesen Typ nicht in den neuen Typ konvertieren können. Das liegt am Wert selbst.
Fehlerbeispiel
Hier ist ein Codebeispiel, das den Fehler erzeugt:
SELECT CAST('Ten' AS DECIMAL(5,2));
Ergebnis:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Dieser Fehler ist aufgetreten, weil SQL Server den Zeichenfolgenwert nicht in einen Dezimalwert konvertieren konnte.
Lösung 1
Um dies zu beheben, müssen Sie sicherstellen, dass Sie einen Wert angeben, den SQL Server konvertieren kann.
Wenn Sie an einer Säule vorbeifahren, überprüfen Sie, ob Sie die richtige Säule haben. Gleiches gilt, wenn Sie eine Variable übergeben – prüfen Sie, ob es die richtige Variable ist.
Denken Sie daran, dass dies möglicherweise nicht in allen Fällen passiert, wenn Sie versuchen, eine Zeichenfolge in eine Dezimalzahl umzuwandeln, da einige Zeichenfolgenwerte konvertiert werden können.
Die folgende Konvertierung ist beispielsweise erfolgreich:
SELECT CAST('10' AS DECIMAL(5,2));
Ergebnis:
10.00
Hier konnte SQL Server diese 10
ausarbeiten ist eine Zahl, und daher war die Konvertierung erfolgreich.
Lösung 2
Wenn es Ihnen nichts ausmacht, dass die Konvertierung fehlschlägt, Sie aber einfach keinen Fehler zurückgeben möchten, versuchen Sie es mit TRY_CAST()
oder TRY_CONVERT()
Funktionen.
Anstatt einen Fehler zurückzugeben, geben diese Funktionen NULL
zurück wenn der Wert nicht konvertiert werden kann.
Beispiel:
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));
Ergebnis:
NULL