SQL Server Management Studio で 0.5 を round するとエラーになる

環境

  • クライアント: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 を投げた場合ではエラーは出ないようです。

参考

]]>