2011-11-27 26 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