2011-11-27 25 views
27

我使用SQL Server 2008 R2的,我有其中插入的数据永远不会超过最大INTINT列,但我有一个使用的SUM函数在执行时超过最大INT限制,并抛出提到的错误查询在标题中。在INT列上使用SUM时如何防止算术溢出错误?

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

这里是我的查询:

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 

注:PokemonExpINT类型。

回答

54

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

尝试以下操作:

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 
+0

正确的答案非常感谢你 – MonsterMMORPG

+0

对于它的价值,同样似乎与AVG发生,即使它是你的价值观的简单相加那四溢。 –

1

您不必列类型更改为BIGINT得到适当的总和。

仅有CAST或之前CONVERTPokemonExpBIGINT在执行SUM喜欢如下:在SUM

SUM(CAST(PokemonExp AS BIGINT)) 
0

接受型表达的确定返回类型。

尝试以下操作:

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 
+0

'CAST(PokemonExp AS BIGINT)'没有显式地将结果转换为'BIGINT',这与OP想要的相反? – SuperBiasedMan