Sql server 2008 r2 在INT列上使用SUM时如何防止算术溢出错误?
我使用的是SQL Server 2008 R2,我有一个Sql server 2008 r2 在INT列上使用SUM时如何防止算术溢出错误?,sql-server-2008-r2,int,sum,overflow,arithmeticexception,Sql Server 2008 R2,Int,Sum,Overflow,Arithmeticexception,我使用的是SQL Server 2008 R2,我有一个INT列,其中插入的数据永远不会超过maxINT,但我有一个查询,它使用了SUM函数,执行时超过maxINT限制,并抛出标题中提到的错误 我希望能够在不将列类型从INT更改为BIGINT的情况下执行此查询 我的问题是: SELECT UserId, SUM( PokemonExp ) AS TotalExp, MAX( PokemonLevel ) AS MaxPokeLevel
INT
列,其中插入的数据永远不会超过maxINT
,但我有一个查询,它使用了SUM
函数,执行时超过maxINT
限制,并抛出标题中提到的错误
我希望能够在不将列类型从INT
更改为BIGINT
的情况下执行此查询
我的问题是:
SELECT UserId,
SUM( PokemonExp ) AS TotalExp,
MAX( PokemonLevel ) AS MaxPokeLevel
FROM mytable
GROUP BY UserId
ORDER BY TotalExp DESC
注意:PokemonExp列的类型为INT
中的表达式类型确定返回类型
请尝试以下操作:
SELECT UserId,
SUM( CAST( PokemonExp AS BIGINT )) AS TotalExp,
MAX( PokemonLevel ) AS MaxPokeLevel
FROM mytable
GROUP BY UserId
ORDER BY TotalExp DESC
选择UserId,
SUM(将pokemonex转换为BIGINT)作为TotalExp,
MAX(PokemonLevel)作为MaxPokeLevel
从mytable
按用户ID分组
按TotalExp DESC订购
您无需将列类型更改为BIGINT
即可获得适当的总和
只需将CAST
或转换为pokemonex
到BIGINT
,然后执行SUM
如下操作:
SUM(将pokemonex转换为BIGINT))
SUM中接受的表达式类型决定返回类型
请尝试以下操作:
SELECT UserId,
SUM( CAST( PokemonExp AS BIGINT )) AS TotalExp,
MAX( PokemonLevel ) AS MaxPokeLevel
FROM mytable
GROUP BY UserId
ORDER BY TotalExp DESC
就其价值而言,AVG似乎也发生了同样的情况,即使它只是溢出的值的总和。是否将结果强制转换为BIGINT
,这与OP想要的相反?