2010-01-13 4 views
58

J'ai une erreur étant lancée par SQL Server Management Studio lors de l'exécution de ce code:Pourquoi SQL Server génère-t-il une erreur de dépassement de capacité Arithmetic lors de la conversion d'int en type de données numérique?

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

mais quand je change de déclaration numérique à

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

tout va bien.

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

Répondre

109

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

Une valeur numérique (3,2) ne peut contenir que 9,99.

26

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

16

NUMERIC(3,2) signifie: 3 chiffres au total, 2 après la virgule. Vous n'avez donc qu'une seule décimale avant le point décimal. Essayez NUMERIC(5,2) - trois avant, deux après le point décimal.

14

La précision et l'échelle sont souvent mal comprises. En numeric (3,2) vous voulez 3 chiffres globalement, mais 2 à droite de la décimale. Si vous voulez 15 => 15.00 de sorte que le premier 1 provoque le débordement (puisque si vous voulez 2 chiffres à la droite de la décimale, il n'y a plus de place sur la gauche pour un chiffre de plus). Avec 4,2 il n'y a pas de problème car les 4 chiffres correspondent.

Questions connexes