昨天在 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 转换为小数来轻松解决,但由于它是 @c 我们正在返回并且其他情况不应该被击中,这是一个奇怪的问题。任何人都足够了解 SQL 编译来解释这一点?