我今天在SQL Server 2008中发现了一件奇怪的事情。我写了ROUND
函数,我随机测试。
从9.50-9.99开始,这行代码:
SELECT ROUND(X.XX, 0);
抛出此错误:
执行批处理时发生错误 错误消息是:算术溢出。
但是从9.00-9.49开始工作得很好。
任何人都可以让我知道该代码有什么问题吗?
答案 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')