web-dev-qa-db-fra.com

Comment prévenir les erreurs de dépassement arithmétique lors de l'utilisation de SUM sur une colonne INT?

J'utilise SQL Server 2008 R2 et j'ai une colonne INT où les données insérées ne dépassent jamais le maximum INT, mais j'ai une requête qui utilise la fonction SUM qui, une fois exécutée, dépasse le maximum INT dans le titre.

Je veux pouvoir exécuter cette requête sans changer le type de colonne de INT à BIGINT

Voici ma requête:

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

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC

Remarque: La colonne PokemonExp est de type INT.

27
MonsterMMORPG

Le type d'expression dans SUM détermine le type de retour. 

Essayez ce qui suit:

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

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC
56
Michał Powaga

Il n'est pas nécessaire de changer le type de colonne en BIGINT pour obtenir une somme appropriée. 

Juste CAST ou CONVERTPokemonExp à BIGINT avant vous effectuez la SUM comme suit:

SUM( CAST( PokemonExp AS BIGINT ))
1
JayC

Le type d'expression accepté dans SUM détermine le type de retour.

Essayez ce qui suit:

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

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC
0
user5142669