回滚错误SQL Server 2008

时间:2017-11-17 09:55:00

标签: sql sql-server

我今天在SQL Server 2008中发现了一件奇怪的事情。我写了ROUND函数,我随机测试。

从9.50-9.99开始,这行代码:

SELECT ROUND(X.XX, 0);  

抛出此错误:

  

执行批处理时发生错误   错误消息是:算术溢出。

但是从9.00-9.49开始工作得很好。

任何人都可以让我知道该代码有什么问题吗?

1 个答案:

答案 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')