Antworten:
Sie sind gleich. Numerisch entspricht funktional der Dezimalzahl.
MSDN: dezimal und numerisch
decimal
ist genau so präzise wie deklarierte, während numeric
ist mindestens so präzise wie erklärt. In SQL Server sind beide genau so präzise wie deklariert, dh es wird nicht die Flexibilität verwendet numeric
, die der Standard zulässt.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
angezeigt. Beide müssen NUMERIC (x, y) oder DECIMAL (x, y) sein.
decimal
ist mindestens so präzise wie erklärt, wohingegen numeric
ist genau so präzise wie erklärt.
Dies sagt der SQL2003-Standard (§6.1 Datentypen) über die beiden:
<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>.
Meines Wissens gibt es keinen Unterschied zwischen den Datentypen NUMERIC und DECIMAL. Sie sind synonym zueinander und beide können verwendet werden. DECIMAL- und NUMERIC-Datentypen sind numerische Datentypen mit fester Genauigkeit und Skalierung.
Bearbeiten:
Wenn Sie mit einigen Kollegen sprechen, hat dies möglicherweise etwas damit zu tun, dass DECIMAL der ANSI-SQL-Standard und NUMERIC einer ist, den Mircosoft bevorzugt, da er in Programmiersprachen häufiger vorkommt. ...Vielleicht ;)
Die Antwort von Joakim Backman ist spezifisch, aber dies kann zusätzliche Klarheit bringen.
Es gibt einen kleinen Unterschied. Gemäß SQL For Dummies, 8. Ausgabe (2013):
Der Datentyp DECIMAL ähnelt NUMERIC. ... Der Unterschied besteht darin, dass Ihre Implementierung möglicherweise eine höhere Genauigkeit als die von Ihnen angegebene angibt. In diesem Fall verwendet die Implementierung die höhere Genauigkeit. Wenn Sie keine Genauigkeit oder Skalierung angeben, verwendet die Implementierung Standardwerte, wie dies beim Typ NUMERIC der Fall ist.
Es scheint, dass der Unterschied bei einigen Implementierungen von SQL in der Datenintegrität liegt. DECIMAL ermöglicht einen Überlauf von dem, was basierend auf einigen Systemstandards definiert ist, wo dies bei NUMERIC nicht der Fall ist.
Sie sind Synonyme, überhaupt kein Unterschied. Dezimale und numerische Datentypen sind numerische Datentypen mit fester Genauigkeit und Skalierung.
-- 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