web-dev-qa-db-fra.com

Pourquoi SQL Server génère une erreur de débordement arithmétique lors de la conversion de int en type de données numérique?

J'ai une erreur renvoyée par SQL Server Management Studio lors de l'exécution de ce code:

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

mais quand je change la 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érique?

65
Junior M

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

Un chiffre (3,2) ne peut contenir que 9,99.

125
Joe

Permet de voir, numérique (3,2). Cela signifie que vous disposez de 3 espaces pour les données et que deux d’entre eux se trouvent à droite de la virgule, ce qui ne laisse qu’un seul à gauche de la virgule. 15 a deux places à gauche de la décimale. BTW si vous pourriez avoir 100 comme valeur, je passerais à numérique (5, 2)

27
HLGEM

NUMERIC(3,2) signifie: 3 chiffres au total, 2 après la virgule décimale. Donc, vous n'avez qu'une seule décimale avant le point décimal.

Essayez NUMERIC(5,2) - trois avant, deux après le point décimal.

17
marc_s

La précision et l'échelle sont souvent mal comprises. En chiffres (3,2), vous souhaitez un total de 3 chiffres, mais 2 à droite de la décimale. Si vous voulez 15 => 15,00, le premier 1 provoque le débordement (puisque si vous voulez 2 chiffres à droite de la décimale, il n’ya que de la place à gauche pour un chiffre supplémentaire). Avec 4,2, il n'y a pas de problème car tous les 4 chiffres conviennent.

16
Aaron Bertrand