Odpowiedzi:
Oni są tacy sami. Liczba jest funkcjonalnie równoważna z dziesiętną.
MSDN: dziesiętne i numeryczne
decimal
jest dokładnie tak precyzyjny, jak oświadczył, gdy numeric
jest co najmniej tak dokładna jak oświadczył. W SQL Server oba są dokładnie tak precyzyjne, jak zadeklarowano, tj. Nie wykorzystują elastyczności, na numeric
jaką pozwala standard.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
. Obie wartości muszą mieć wartość NUMERIC (x, y) lub obie wartości DECIMAL (x, y).
decimal
jest co najmniej tak precyzyjny, jak oświadczył, podczas gdy numeric
jest dokładnie tak precyzyjny, jak oświadczył.
Oto co mówi wówczas standard SQL2003 (§6.1 Typy danych):
<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>.
O ile mi wiadomo, nie ma różnicy między typami danych NUMERIC i DECIMAL. Są dla siebie synonimami i można użyć dowolnego z nich. Typy danych DECIMAL i NUMERIC to numeryczne typy danych o stałej precyzji i skali.
Edytować:
Rozmowa z kilkoma kolegami może mieć coś wspólnego z tym, że DECIMAL jest standardem ANSI SQL, a NUMERIC jest tym, który preferuje Mircosoft, ponieważ jest częściej spotykany w językach programowania. ...Może ;)
Są synonimami, nie ma żadnej różnicy. Typy danych dziesiętnych i liczbowych to numeryczne typy danych o stałej precyzji i skali.
-- 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
Odpowiedź Joakima Backmana jest konkretna, ale może to nadać jej dodatkową jasność.
Jest niewielka różnica. Zgodnie z SQL For Dummies, wydanie 8 (2013):
Typ danych DECIMAL jest podobny do typu NUMERIC. ... Różnica polega na tym, że Twoja implementacja może określić precyzję większą niż określona przez Ciebie - jeśli tak, implementacja używa większej precyzji. Jeśli nie określisz dokładności ani skali, implementacja użyje wartości domyślnych, tak jak ma to miejsce w przypadku typu NUMERIC.
Wydaje się, że różnica między niektórymi implementacjami SQL polega na integralności danych. DECIMAL umożliwia przepełnienie tego, co jest zdefiniowane na podstawie niektórych domyślnych ustawień systemowych, podczas gdy NUMERIC nie.