Réponses:
Ce sont les mêmes. Numérique est fonctionnellement équivalent à décimal.
MSDN: décimal et numérique
decimal
est exactement aussi précis que déclaré, alors qu'il numeric
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é numeric
que la norme permet.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
. Ils doivent tous les deux être NUMERIC (x, y), ou tous les deux être DECIMAL (x, y).
decimal
est au moins aussi précis que déclaré, alors qu'il numeric
est exactement aussi précis que déclaré.
Voici ce que dit alors la norme SQL2003 (§6.1 Types de données) sur les deux:
<exact numeric type> ::=
NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| SMALLINT
| INTEGER
| INT
| BIGINT
...
21) NUMERIC specifies the data type
exact numeric, with the decimal
precision and scale specified by the
<precision> and <scale>.
22) DECIMAL specifies the data type
exact numeric, with the decimal scale
specified by the <scale> and the
implementation-defined decimal
precision equal to or greater than the
value of the specified <precision>.
À 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 et une échelle fixes.
Éditer:
S'adressant à quelques collègues, peut-être que cela a quelque chose à voir avec DECIMAL étant le standard SQL ANSI et NUMERIC étant celui que Mircosoft préfère car il est plus communément trouvé dans les langages de programmation. ...Peut être ;)
Ce sont des synonymes, pas de différence du tout. Les types de données Decimal et Numeric sont des types de données numériques avec une précision et une échelle fixes.
-- Initialize a variable, give it a data type and an initial value
declare @myvar as decimal(18,8) or numeric(18,8)----- 9 bytes needed
-- Increse that the vaue by 1
set @myvar = 123456.7
--Retrieve that value
select @myvar as myVariable
La réponse de Joakim Backman est précise, mais cela peut apporter plus de clarté.
Il y a une petite différence. Selon SQL For Dummies, 8e é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 à celle 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 les valeurs par défaut, comme elle le fait 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 permet un dépassement de ce qui est défini sur la base de certaines valeurs par défaut du système, alors que NUMERIC ne le fait pas.