Ответы:
Они одинаковые. Числовое значение функционально эквивалентно десятичному.
MSDN: десятичный и числовой
decimal
он точно такой же, как заявлено, но numeric
, по крайней мере, так же точен, как заявлено. В SQL Server и то, и другое точно так же точно, как заявлено, т. Е. Не использует гибкость, numeric
которую позволяет стандарт.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
. Они оба должны быть ЧИСЛАМИ (x, y) или оба должны быть ДЕСЯТИЧНЫМ (x, y).
decimal
это по крайней мере , так точно , как заявлено, в то время как numeric
это точно так точен , как заявлено.
Это то, что стандарт SQL2003 (§6.1 Типы данных) говорит о двух:
<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>.
Насколько мне известно, нет разницы между типами данных NUMERIC и DECIMAL. Они синонимичны друг другу, и можно использовать любой из них. Типы данных DECIMAL и NUMERIC - это числовые типы данных с фиксированной точностью и масштабом.
Редактировать:
В разговоре с несколькими коллегами, возможно, это как-то связано с тем, что DECIMAL является стандартом ANSI SQL, а NUMERIC - тем, что предпочитает Mircosoft, поскольку он чаще встречается в языках программирования. ...Может быть ;)
Это синонимы, никакой разницы. Типы данных Decimal и Numeric - это числовые типы данных с фиксированной точностью и масштабом.
-- 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
Ответ Йоакима Бакмана конкретен, но он может внести в него дополнительную ясность.
Есть небольшая разница. Согласно SQL для чайников, 8-е издание (2013 г.):
Тип данных DECIMAL аналогичен NUMERIC. ... Разница в том, что ваша реализация может указывать точность, превышающую указанную вами - в этом случае реализация использует более высокую точность. Если вы не укажете точность или масштаб, реализация будет использовать значения по умолчанию, как это делается с типом NUMERIC.
Кажется, что разница в некоторых реализациях SQL заключается в целостности данных. DECIMAL допускает переполнение из того, что определено на основе некоторых системных значений по умолчанию, тогда как NUMERIC - нет.