避免聚合函数

时间:2016-01-29 21:50:16

标签: sql-server tsql sql-server-2012

有没有办法(除了将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(或任何其他值),我会很好。

1 个答案:

答案 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];

SQL Fiddle