昨日、SQL Server で興味深い問題が見つかりました。これを試してください。
DECLARE @a REAL = 0.0000
DECLARE @c DECIMAL (18,10) = 20754/3.45 -- this is 6015.6521730000
DECLARE @b DECIMAL (18,10) =
CASE
WHEN 1 > 2
THEN @a / 100
WHEN 1 = 2
THEN 56
ELSE @c
END
SELECT @b
精度の問題と、case ステートメントのコンパイル方法に問題があるようです。これは、case ステートメントで REAL @a を 10 進数にキャストすることで簡単に解決できますが、返されるのは @c であり、他のケースは決してヒットしないため、遭遇するのは奇妙な問題です。これを説明するためにSQLコンパイルについて十分に知っている人はいますか?