SELECT ROUND(99.12,-1);
消息8115,级别16,状态2,行1将表达式转换为数值类型的算术溢出错误。
当表达式范围是:
但是,当您在Oracle DB中执行相同的查询时,它可以正常工作并提供预期的输出。
SELECT ROUND(99.12,-1) FROM DUAL;
ans: 100
所以有人可以解释一下,为什么它在sqlserver2008中表现得如此
提前致谢
当执行时SELECT ROUND(99.12,-1)
,第一个参数是隐式的NUMERIC(4,2)
,不允许小数点前超过2位数字。
95.00到99.99失败的原因是它们被四舍五入为100,而不能容纳在NUMERIC(4,2)
。类似的逻辑也适用于您的其他极端情况。
阅读此MSDN文章可进行令人大开眼界的讨论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句