有没有办法(除了将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];
我在TRY_CAST()
上尝试了SUM()
,但似乎错误发生在该点之前。如果在溢出时返回NULL(或任何其他值),我会很好。
答案 0 :(得分:3)
在聚合之前转换为bigint
然后将结果try_casting回int将比我更好
但没有它的方法是
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
DECLARE @tbl TABLE ( [i] INT );
INSERT INTO @tbl
( [i] )
VALUES ( POWER(2, 30) ),
( POWER(2, 30) );
SELECT SUM([t].[i])
FROM @tbl AS [t];