2011-11-27 70 views
27

estoy usando SQL Server 2008 R2 y tengo una columna INT donde los datos insertados no supera el máximo INT, pero tengo una consulta que utiliza la función SUM, que cuando es ejecutado supera el límite máximo INT y lanza el error mencionado En el título.¿Cómo prevenir el error de desbordamiento aritmético al usar SUM en la columna INT?

Deseo poder ejecutar esta consulta sin cambiar el tipo de columna de INT a BIGINT.

Aquí es mi consulta:

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 

Nota: La columnaPokemonExp es de tipo INT.

Respuesta

54

Tipo de expresión en SUM determina el tipo de devolución.

Pruebe lo siguiente:

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

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 
+0

respuesta correcta muchas gracias – MonsterMMORPG

+0

Por lo que vale la pena, el mismo parece suceder con AVG, incluso si es sólo la suma de sus valores que es desbordante. –

1

Usted no tiene que cambiar el tipo de columna a BIGINT para obtener una suma correcta.

Sólo CAST o CONVERTPokemonExp-BIGINT antes de realizar la SUM LIKE:

SUM(CAST(PokemonExp AS BIGINT)) 
0

tipo aceptado de expresión en SUM determina el tipo de devolución.

intente lo siguiente:

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)' no arroja explícitamente el resultado a 'BIGINT', que era lo contrario de lo que OP quería? – SuperBiasedMan

Cuestiones relacionadas