2011-11-27 4 views
27

私はのSQL Server 2008 R2を使用していますが、私が挿入されたデータは、最大INTを超えることはありませんが、私は、実行時に最大INT限度を超えたと述べたエラーをスロー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 

注:PokemonExp列がタイプINTである

は、ここに私のクエリです。

答えて

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に列の種類を変更する必要はありません。あなたがSUMを実行前

BIGINT

だけCASTまたはCONVERTPokemonExpなどは、以下: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'に明示的にキャストしていません。 – SuperBiasedMan

関連する問題