1
有没有一种方法(除了将i
转换为bigint之类的东西),以避免下面一组语句中的算术溢出错误?避免集合函数的算术溢出
DECLARE @tbl TABLE ([i] INT);
INSERT INTO @tbl
([i])
VALUES (POWER(2, 30)),
(POWER(2, 30));
SELECT SUM([t].[i])
FROM @tbl AS [t];
我在SUM()
尝试了TRY_CAST()
但似乎错误是在该点之前发生的事情。如果在溢出时返回NULL(或任何其他值),我很好。
我今天新学到了一些东西。 – SQLChao
需要注意的是[*将ARITHABORT设置为OFF会对导致性能问题的查询优化产生负面影响。](https://msdn.microsoft.com/en-us/library/ms190306.aspx#Anchor_1)您应该真的在寻找另一种避免算术溢出的方法。 –
@TT。它可以防止计算列上的索引视图和索引被匹配,但如果没有使用这些索引,则不会对查询优化产生任何其他负面影响。文章中的警告是关于此设置的值不匹配使故障排除变得更加困难,因为具有不同值的这些选项的不同会话不能共享彼此的计划,因此可能会出现参数嗅探问题,只会出现在应用程序使用的计划中,然后在SSMS中运行都可以正常工作。 –