2017-11-17 16 views
2

SQL Server 2008で奇妙なことが見つかりました。私はROUND関数を書いて、これをランダムにテストします。SQL Server 2008でエラーが発生する

9.50から9.99から、このコード行:

SELECT ROUND(X.XX, 0); 

は、このエラーがスローされます。

An error occurred while executing batch.
Error message is: Arithmetic Overflow.

が、9.00から9.49からそれがうまく働いています。

誰でも私にそのコードの何が間違っているか教えていただけますか?

+1

私たちに機能コードを表示します。 – jarlh

+0

@jarlhコードは既に存在します:SQLで 'SELECT ROUND(9.50,0);'を実行すると、エラーが発生します。 – Nope

+0

値を引用符で囲みました –

答えて

7

これは暗黙的にこれをnumeric(3,2)データ型に適合させようとしているためです。これは10.00がオーバーフローします。あなたは、より大きなデータ型にキャストする必要があります:select round(cast(9.50 as numeric(4,2)),0)

あなたは暗黙的なデータ型&精度が何であるかを確認するには、このコードを実行することができます。

select SQL_VARIANT_PROPERTY (cast(9.50 as SQL_VARIANT), 'BaseType'), 
     SQL_VARIANT_PROPERTY (cast(9.50 as SQL_VARIANT), 'Precision'), 
     SQL_VARIANT_PROPERTY (cast(9.50 as SQL_VARIANT), 'Scale') 
関連する問題