Recherche sur le blog

mardi 29 juillet 2014

[SQL] 80040e57 : Arithmetic Overflow SQL Server

Lorsque vous effectuez une insertion dans une colonne avec une valeur numérique trop grande ou lorsque vous effectuez par exemple une somme impliquant une ou plusieurs colonnes numérique dont le résultat dépasse le type imposé (par exemple, le résultat obtenu dépasse l’entier), vous obtenez l’exception 80040e57 avec par exemple le message d’erreur suivant : “Arithmetic overflow error converting expression to data type int”.

Par exemple, supposons la requête suivante :
SELECT b.Cart, SUM(a.QTE * b.POIDS)
FROM Commande a JOIN Article b
ON a.cart = b.cart
WHERE ...
GROUP BY ...
On sait que la colonne QTE et la colonne POIDS sont au format entier (int). Si le résultat de la somme pour l’article vient à dépasser la limite maximale définie par le type entier, une erreur sera renvoyée. Une solution consiste donc à convertir chaque colonne dans un autre type (exemple : bigint). Cela donnerait par exemple :
SELECT b.Cart, SUM( CAST(a.QTE AS BIGINT) * 
  CAST(b.POIDS AS BIGINT))
FROM Commande a JOIN Article b
ON a.cart = b.cart
WHERE ...
GROUP BY ...
Dans le cas d’une opération d’insertion ou de mise à jour, il faudra peut-être envisager de modifier le type de la colonne destination ou restreindre les valeurs possibles qui peuvent être stockées dans la table. Pour obtenir davantage d’informations consultez la base de connaissances Microsoft Technet (MS163363).