Відповіді:
Вони однакові. Числовий функціонально еквівалент десятковому.
MSDN: десятковий і числовий
decimal
є в точності так точний , як заявлено, в той час як numeric
це по крайней мере , так точно , як заявлено. У SQL Server обидва настільки ж точні, як і декларовані, тобто він не використовує гнучкість, numeric
яку дозволяє стандарт.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
. Вони повинні бути як NUMERIC (x, y), так і обидві - DECIMAL (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 вважає за краще, як його частіше зустрічається в мовах програмування. ...Може бути ;)
Вони є синонімами, різниці взагалі немає. Декальні та числові типи даних - це числові типи даних із фіксованою точністю та масштабом.
-- 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 немає.