78 votes

Pourquoi SQL Server lance-t-il une erreur de débordement arithmétique convertissant int en numérique de type de données ?

Une erreur est survenue lors de l'exécution de ce code par SQL Server Management Studio :

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))

mais quand je change la déclaration numérique en

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))

Tout va bien.

Y a-t-il une limitation pour le type de données numériques ?

152voto

Joe Points 17829

Numérique définit le nombre TOTAL de chiffres, puis le nombre après la décimale.

Un chiffre(3,2) ne peut tenir que jusqu'à 9,99.

31voto

HLGEM Points 54641

Voyons, numérique (3,2). Cela signifie que vous avez 3 places pour les données et deux d'entre eux sont à la droite de la décimale laissant seulement un à la gauche de la décimale. 15 a deux places à la gauche de la décimale. BTW si vous pouviez avoir 100 comme valeur, je l'augmenterais à numérique (5, 2)

21voto

marc_s Points 321990

NUMERIC(3,2) signifie : 3 chiffres au total, 2 après la virgule. Vous n'avez donc qu'une seule décimale avant la virgule.

Essayez NUMERIC(5,2) - trois avant, deux après la virgule.

18voto

Aaron Bertrand Points 116343

La précision et l'échelle sont souvent mal comprises. En numérique(3,2), vous voulez 3 chiffres au total, mais 2 à droite de la décimale. Si vous voulez 15 => 15.00 donc le 1 en tête provoque le débordement (puisque si vous voulez 2 chiffres à droite de la décimale, il n'y a de place à gauche que pour un chiffre de plus). Avec 4,2 il n'y a pas de problème parce que les 4 chiffres correspondent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X