Y a-t-il une différence entre les types de données DECIMAL et NUMERIC dans SQL Server?
Quand devrais-je utiliser DECIMAL et quand NUMERIC?
Y a-t-il une différence entre les types de données DECIMAL et NUMERIC dans SQL Server?
Quand devrais-je utiliser DECIMAL et quand NUMERIC?
Ils sont pareils. Numeric est fonctionnellement équivalent à décimal.
MSDN: decimal et numeric
La fonctionnalité équivalente n'est pas la même que l'égalité. En fait, dans les diapositives du cours MS6232A de l'instructeur, il y a un commentaire ajouté disant qu'elles sont PRESQUE les mêmes. En même temps, aucune recommandation n'est faite par Microsoft concernant l'une ou l'autre (cependant, DECIMAL a plus de sens, car c'est un type de données standard au lieu d'un type de données hérité de Sybase). Toujours se demander quelle est la vraie différence (derrière les coulisses) :-).
@vstrien: La seule différence que je trouve est que dans la norme SQL-92, décimal
est exactement aussi précis que déclaré, tandis que numérique
est au moins aussi précis que déclaré. Dans SQL Server, les deux sont exactement aussi précis que déclaré, c'est-à-dire qu'il n'utilise pas la flexibilité pour numérique
que permet la norme.
NOTE, cependant, que SQL Server ne les traite pas comme interchangeables : si, par exemple, vous avez une colonne "parent" au format "DECIMAL(18,0)", et que vous essayez d'ajouter une clé étrangère pour qu'elle fasse référence à une colonne au format "NUMERIC(18,0)", vous obtiendrez l'erreur La colonne '' n'est pas du même type de données que la colonne de référence '.' dans la clé étrangère ''
. Elles doivent toutes les deux être NUMERIC(x,y), ou toutes les deux être DECIMAL(x,y).
C'est ce que dit ensuite la norme SQL2003 (§6.1 Types de Données) à propos des deux :
::=
NUMÉRIQUE [ [ <échelle> ] ]
| DÉCIMAL [ [ <échelle> ] ]
| DEC [ [ <échelle> ] ]
| SMALLINT
| ENTIER
| INT
| GRANDENTIER
...
21) NUMÉRIQUE spécifie le type de données
numérique exact, avec la précision décimale
et l'échelle spécifiées par
et <échelle>.
22) DÉCIMAL spécifie le type de données
numérique exact, avec l'échelle décimale
spécifiée par <échelle> et la
précision décimale définie par
l'implémentation, égale ou supérieure à la
valeur de la spécifiée.
Wiscorp a une version provisoire de la norme à télécharger (wiscorp.com/sql_2003_standard.zip), si vous voulez la version finale vous devez l'acheter (fr.wikipedia.org/wiki/SQL2003#Disponibilité_de_la_documentation).
Notez que ceci est la norme SQL, et non une description de la façon dont SQL Server l'implémente.
À ma connaissance, il n'y a aucune différence entre les types de données NUMERIC et DECIMAL. Ils sont synonymes l'un de l'autre et l'un ou l'autre peut être utilisé. Les types de données DECIMAL et NUMERIC sont des types de données numériques avec une précision fixe et une échelle.
Éditer:
En discutant avec quelques collègues, peut-être que cela a quelque chose à voir avec DECIMAL étant la norme ANSI SQL et NUMERIC étant celle que Microsoft préfère car elle est plus couramment utilisée dans les langages de programmation. ...Peut-être ;)
La réponse de Joakim Backman est spécifique, mais cela pourrait apporter une clarté supplémentaire à cela.
Il y a une légère différence. Selon SQL For Dummies, 8ème édition (2013) :
Le type de données DECIMAL est similaire à NUMERIC. ... La différence est que votre implémentation peut spécifier une précision supérieure à ce que vous spécifiez - si tel est le cas, l'implémentation utilise la plus grande précision. Si vous ne spécifiez pas de précision ou d'échelle, l'implémentation utilise des valeurs par défaut, comme c'est le cas avec le type NUMERIC.
Il semble que la différence sur certaines implémentations de SQL réside dans l'intégrité des données. DECIMAL autorise un dépassement par rapport à ce qui est défini en fonction de certaines configurations système par défaut, alors que NUMERIC ne le fait pas.
Ils sont synonymes, aucune différence du tout. Les types de données décimaux et numériques sont des types de données numériques avec une précision et une échelle fixes.
-- Initialiser une variable, lui donner un type de données et une valeur initiale
declare @myvar as decimal(18,8) or numeric(18,8)----- 9 octets nécessaires
-- Augmenter la valeur de 1
set @myvar = 123456.7
-- Récupérer cette valeur
select @myvar as myVariable
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.