Si vous recevez l'erreur Msg 8115, niveau 16, Erreur de débordement arithmétique lors de la conversion de l'expression en type de données int dans SQL Server, il se peut que vous effectuiez un calcul qui aboutit à une valeur hors plage.
Cela peut arriver lorsque vous utilisez une fonction telle que SUM()
sur une colonne, et le calcul donne une valeur en dehors de la plage du type de colonne.
Exemple d'erreur
Voici un exemple de code qui génère l'erreur :
SELECT SUM(bank_balance)
FROM accounts;
Résultat :
Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type int.
Dans ce cas, j'ai utilisé le SUM()
fonction pour obtenir la somme du bank_balance
colonne, dont le type de données est int
.
L'erreur s'est produite car le résultat du calcul est en dehors de la plage de int
type de données.
Voici toutes les données de mon tableau :
SELECT bank_balance
FROM accounts;
Résultat :
+----------------+ | bank_balance | |----------------| | 1300000000 | | 1200000000 | | 800500000 | +----------------+
Ce sont de gros soldes bancaires… et en additionnant les trois, on obtient un nombre plus grand qu'un int
peut gérer (le int
la plage est de -2 147 483 648 à 2 147 483 647).
La solution
Nous pouvons traiter cette erreur en convertissant le int
colonne à un bigint
lorsque nous exécutons la requête :
SELECT SUM(CAST(bank_balance AS bigint))
FROM Accounts;
Résultat :
3300500000
Cette fois, ça a marché.
Vous pouvez également modifier le type de données de la colonne réelle pour une solution plus permanente.
Au cas où vous vous poseriez la question, le bigint
la plage est de -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807.
Même erreur dans différents scénarios
La même erreur (Msg 8115) peut également se produire (avec un message d'erreur légèrement différent) lorsque vous essayez de convertir explicitement entre les types de données et que la valeur d'origine est en dehors de la plage du nouveau type. Voir Corriger "Erreur de débordement arithmétique convertissant int en type de données numérique" dans SQL Server pour résoudre ce problème.
La même erreur (Msg 8115) peut également se produire (avec un message d'erreur légèrement différent) lorsque vous essayez d'insérer des données dans une table lorsque son IDENTITY
colonne a atteint la limite de son type de données. Voir le correctif :"Erreur de débordement arithmétique lors de la conversion de IDENTITY
au type de données… » dans SQL Server pour savoir comment résoudre ce problème.