データ型varcharから数値への変換エラーのようなSQLServerエラーメッセージ8114が発生した場合 、おそらく、値を宛先タイプに変換できないために失敗するデータ型変換を実行しようとしているためです。
そのタイプを新しいタイプに変換できないからではありません。それは価値そのもののせいです。
エラーの例
エラーを生成するコードの例を次に示します。
SELECT CAST('Ten' AS DECIMAL(5,2));
結果:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
このエラーは、SQLServerが文字列値を10進数に変換できなかったために発生しました。
ソリューション1
これを修正するには、SQLServerが変換できる値を指定する必要があります。
列を渡す場合は、正しい列があることを確認してください。変数を渡す場合も同じです–それが正しい変数であることを確認してください。
一部の文字列値は変換できるため、文字列を10進数に変換しようとするすべての場合にこれが発生するわけではないことに注意してください。
たとえば、次の変換は成功します:
SELECT CAST('10' AS DECIMAL(5,2));
結果:
10.00
ここで、SQLServerはその10
を解決することができました は数値であるため、変換は成功しました。
ソリューション2
変換が失敗してもかまわないが、エラーを返さないようにする場合は、TRY_CAST()
を試してください。 またはTRY_CONVERT()
機能。
これらの関数は、エラーを返すのではなく、NULL
を返します。 値を変換できない場合。
例:
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));
結果:
NULL