Erreur de dépassement arithmétique lors de la conversion

Eviter l’erreur SQL Server: Une erreur de dépassement arithmétique s’est produite lors de la conversion en type de données int.

Insérer des données dans une table à l’aide d’une procédure stockée par exemple. Faire face à ce message d’erreur SQL Server peut être perturbant. Même si les erreurs de conversion SQL sont classiques, il est très utile de trouver la solution et d’appliquer les meilleures pratiques du secteur pour les éviter.

Dans ce cas, la procédure stockée qui exécute la requête génère un code T-SQL dynamique. Ensuite, elle exécute le code et insère les données de diverses tables dans une seule table cible. Il s’agit d’une erreur de conversion typique de débordement arithmétique int de SQL Server.

Gérer l’erreur de dépassement arithmétique s’est produite lors de la conversion

En exécutant le même morceau de code T-SQL indépendamment, aucune erreur n’est rencontrée. C’est-à-dire en dehors de la procédure stockée, directement dans les fenêtres de SQL Server Management Studio. Mais lors de l’intégration du même code dans la procédure stockée, l’erreur suivante apparaît :

Message d’erreur: « Une erreur de dépassement arithmétique s’est produite lors de la conversion de expression en type de données int. »

Ou avec une version Anglaise de SSMS:

Error Message: Arithmetic overflow error converting expression to data type int.”

Après analyse, le message d’erreur de conversion ne provenait pas de la clause SELECT. La clause SQL INSERT de la même procédure stockée T-SQL est à l’origine de l’erreur. La cause principale est l’insertion d’une grande valeur entière dans la table. Pour le type de données integer dans SQL Server, le nombre doit être compris entre -2^31 (-2 à la puissance 31) et 2^31 (2 à la puissance 31).

En d’autres termes, la plage pour le type INTEGER est exactement comprise entre ces 2 valeurs:

  • Valeur minimum : -2,147,483,648
  • Valeur maximum : 2,147,483,648

Eviter l’erreur de dépassement arithmétique avec un type adapté

Voici la solution pour éviter cette erreur de dépassement arithmétique. Changer le type de données de INT à un des types suivants:

  1. BIGINT
  2. DECIMAL(11,0) par exemple.

Veuillez noter que dans ce cas, l’erreur de conversion est due au fait que le nombre entier est trop grand. Il peut également s’agir de l’insertion d’une valeur texte dans un champ entier. Consulter aussi la documentation officielle des types de données int, bigint, smallint et tinyint pour SQL Server. Voici un exemple d’une table des ventes qui utilise certains des types de données.

Questions classiques les erreurs de conversion de données

Cet article montre comment éviter simplement les erreurs fréquentes de dépassement arithmétique. Lors de la conversion d’expressions avec SQL Server par exemple. Cela se produit lors de l’insertion d’un nombre trop grand dans un type de données entier.

Qu’est-ce qu’une erreur de dépassement arithmétique de SQL Server ?

Une erreur de dépassement arithmétique est une erreur rencontrée lors de la conversion d’un type de données SQL Server en un autre. Par exemple, d’un chiffre numérique à un nombre entier, car le type entier peut traiter des chiffres plus petits que le type numérique.

Comment éviter les erreurs de conversion avec SQL Server ?

Une bonne pratique pour éviter les erreurs de conversion pendant est de mettre en place des contrôles pour les entrées. De plus, veillez à contrôler les valeurs insérées dans la base de données. Par exemple, les utilisateurs ne peuvent saisir que des dates valides dans un champ de date.

Quel est le plus grand nombre pour un INTEGER de SQL Server ?

Le plus grand nombre pour le type de données entier du serveur SQL est compris entre -2 à la puissance 31 et 2 à la puissance 31. Cela signifie de -2^31 à 2^31, ce qui correspond exactement à cette plage : de -2 147 483 648 à 2 147 483 648. Pour éviter toute erreur de conversion, considérez toujours la valeur maximale des données et dimensionnez la base de données et les types de données en conséquence.

Quelle est la différence entre INT et BIGINT ?

Un bigint est un nombre entier, c’est-à-dire un nombre sans décimales, et dans SQL Server, il peut aller de -2^63, soit exactement -9 223 372 036 854 775 808, à 2^63-1, soit 9 223 372 036 854 775 807, et utilise 8 octets de stockage. Tandis qu’un INTEGER va de -2^31 qui est égal à -2,147,483,648 à 2^31-1 qui est exactement 2,147,483,647. Les données d’un INTEGER sont stockées sur 4 octets.

Une autre erreur classique est une double insertion de clef unique dans une table avec une contrainte d’unicité.