環境
- クライアント:SQL Server Management Studio 2008 R2
- データベース:SQL Server 2008
内容
SQL Server Management Studio で「round(0.50, 0)」のように0.5<=x<1の範囲を round すると「expression をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。」というエラーが発生します。
下のコードのコメントを外すと確認できると思います。
select
round(0.01, 0) as [0.01]
,round(0.49, 0) as [0.49]
--,round(0.50, 0) as [0.50] -- expression をデータ型 numeric に変換中に、
--,round(0.99, 0) as [0.99] -- 算術オーバーフロー エラーが発生しました。
,round(cast(0.50 as numeric(10, 2)), 0) as [0.50]
,round(cast(0.99 as numeric(10, 2)), 0) as [0.99]
,round(1.01, 0) as [1.01]
,round(1.49, 0) as [1.49]
,round(1.50, 0) as [1.50]
,round(1.99, 0) as [1.99]
,round(2.01, 0) as [2.01]
調べてみるとどうやら SQL Server Management Studio で実行したときだけ出るようで、プログラムなどから SQL を投げた場合ではエラーは出ないようです。
参考
- SQLSERVER2005_ROUND関数のバグ? (Microsoft Connect)
- SQLSERVER2005_ROUND関数のバグ? (@IT会議室)
- SQL Server Management Studio で ROUND 関数を使うとエラーが発生する