Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Correction de "Erreur de débordement arithmétique lors de la conversion de int en type de données numérique" dans SQL Server

Si vous recevez l'erreur Msg 8115, Niveau 16, Erreur de débordement arithmétique convertissant int en type de données numérique dans SQL Server, c'est probablement parce que vous effectuez une opération qui entraîne une erreur de conversion de données en raison d'une valeur hors plage.

Cela se produit souvent lorsque vous essayez de convertir un nombre en un type de données différent, mais qu'il est en dehors de la plage acceptée pour le nouveau type de données.

Exemple d'erreur

Voici un exemple de code qui génère l'erreur :

SELECT CAST(275 AS DECIMAL(3, 2));

Résultat :

Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting int to data type numeric.

Dans ce cas, j'essayais de convertir un entier en décimal.

Mais mon erreur est que je n'ai autorisé qu'une précision de 3 pour la valeur décimale résultante. Cette précision n'est pas suffisante pour la valeur qui serait produite par cette opération (qui serait 275.00 ).

La solution

Le problème est facilement résolu :

SELECT CAST(275 AS DECIMAL(5, 2));

Résultat :

275.00

Tout ce que j'ai fait, c'est augmenter l'argument de précision à une valeur plus suffisante.

Plus précisément, je l'ai augmenté de 3 à 5 .

Si je m'attendais à ce que des entiers plus grands arrivent (par exemple, si l'entier était dans une colonne de base de données), alors je devrais augmenter la précision afin qu'il puisse gérer les valeurs plus grandes.

Juste pour être clair, la précision est le nombre total maximum de chiffres décimaux à stocker. Ce nombre comprend à la fois les côtés gauche et droit de la virgule décimale. La précision doit être une valeur de 1 par la précision maximale de 38 . La précision par défaut est 18 .

Même erreur dans différents scénarios

La même erreur (Msg 8115) peut se produire (avec un message d'erreur légèrement différent) 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. Voir Corriger "Erreur de débordement arithmétique lors de la conversion de l'expression en type de données int" dans SQL Server pour résoudre ce problème.

Et 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.