2011-11-27 15 views
27

R2'ninSQL Server 2008 kullanıyorum ve veri hiçbir zaman eklenen maksimum INT aşan bir INT sütuna sahip, ama yürütüldüğünde maksimum INT sınırını aşan ve bahsedilen hata verir SUM fonksiyonunu kullanan bir sorgu var başlıkta.SUM on INT sütununda aritmetik taşma hatası nasıl önlenir?

Sütun türünü INT'dan BIGINT'a değiştirmeden bu sorguyu yürütmek istiyorum.

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 

Not:PokemonExp kolon tipi INT taşımaktadır

İşte benim sorgusu olur.

cevap

54

İfade türü SUM içinde dönüş türünü belirler.

aşağıdaki deneyin:

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 
+0

doğru cevap size ne öyle değer için – MonsterMMORPG

+0

çok teşekkür ederim, aynı AVG ile ne gibi görünüyor, bu taşan var değerlerinizin sadece toplamı olsa bile. –

1

Sen düzgün bir miktar almak için BIGINT için sütun türünü değiştirmek gerekmez.

Sadece CAST veya CONVERTPokemonExp önce BIGINT Sizin SUM gibi aşağıdaki gerçekleştirin: SUM ifade

SUM(CAST(PokemonExp AS BIGINT)) 
0

Kabul tip dönüş türünü belirler.

Aşağıdakileri deneyin:

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)”, sonucu OP'nin istediği şeyin tam tersi olan “BIGINT” e çevirmedi mi? – SuperBiasedMan