L'affectation décimale t-sql change la valeur
Question
Pourquoi l'instruction select ci-dessous renvoie-t-elle deux valeurs différentes?
declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
La solution
Cela convient pour les littéraux tels que 1.0, mais si vous extrayez les données des colonnes d'un tableau, vous devez convertir / convertir le premier nombre évalué dans votre équation:
convert(decimal, [col1]) / ([col2] + [col3])
-ou -
convert(decimal(15, 2), [col1]) / ([col2] + [col3])
Autres conseils
J'ai appris par un collègue au moment où j'ai posté ceci.
Vous devez spécifier la précision et l'échelle par défaut.
Cela fonctionne dans ce scénario: declare @tempDec decimal (3,2)
À partir de MSDN:
décimal [(p [, s])] et numérique [(p [, s])] Précision fixe et numéros d'échelle. Lorsque la précision maximale est utilisée, les valeurs valides sont comprises entre - 10 ^ 38 +1 et 10 ^ 38 - 1. Les synonymes SQL-92 de décimal sont déc et déc (p, s). numeric est fonctionnellement équivalent à décimal.
p (précision) Le nombre total maximum de chiffres décimaux pouvant être enregistrés, à gauche et à droite du point décimal. La précision doit être comprise entre 1 et la précision maximale de 38. La précision par défaut est de 18.
s (échelle) Nombre maximal de chiffres décimaux pouvant être stockés à droite du séparateur décimal. L'échelle doit être une valeur de 0 à p. L'échelle ne peut être spécifiée que si une précision est spécifiée. L'échelle par défaut est 0; donc 0 < = s < = p. Les tailles de stockage maximales varient en fonction de la précision.