在INT列上使用SUM时如何防止算术溢出错误?

时间:2011-11-27 21:42:41

标签: sql-server-2008-r2 int sum overflow arithmeticexception

我正在使用 SQL Server 2008 R2 ,我有一个INT列,其中插入的数据永远不会超过最大INT,但我有一个查询使用{ {1}}函数在执行时超过最大SUM限制并抛出标题中提到的错误。

我希望能够在不将列类型从INT更改为INT的情况下执行此查询。

这是我的问题:

BIGINT

注意: SELECT UserId, SUM( PokemonExp ) AS TotalExp, MAX( PokemonLevel ) AS MaxPokeLevel FROM mytable GROUP BY UserId ORDER BY TotalExp DESC 列的类型为PokemonExp

3 个答案:

答案 0 :(得分:56)

SUM中的表达类型决定了返回类型。

尝试以下方法:

SELECT    UserId,
          SUM( CAST( PokemonExp AS BIGINT ))  AS TotalExp,
          MAX( PokemonLevel )                 AS MaxPokeLevel

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC

答案 1 :(得分:1)

您无需将列类型更改为BIGINT即可获得正确的总和。

CASTCONVERT PokemonExpBIGINT 之前执行SUM,如下所示:

SUM( CAST( PokemonExp AS BIGINT ))

答案 2 :(得分:0)

SUM中接受的表达式类型决定了返回类型。

尝试以下方法:

SELECT    UserId,
          SUM( CAST( PokemonExp AS BIGINT ))  AS TotalExp,
          MAX( PokemonLevel )                 AS MaxPokeLevel

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC