Answers:
他们是一样的。数值在功能上等同于十进制。
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>.
它们是同义词,一点也没有区别。十进制和数值数据类型是具有固定精度和小数位数的数值数据类型。
-- 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
Joakim Backman的回答很具体,但这可能会使其更加清晰。
有细微的差别。根据《 SQL For Dummies,第8版(2013)》:
DECIMAL数据类型类似于NUMERIC。...区别在于您的实现所指定的精度可能比您指定的精度高-如果是这样,则实现会使用更高的精度。如果未指定精度或小数位数,则实现将使用默认值,就像NUMERIC类型一样。
看来区别在 某些 SQL实现在于数据完整性。DECIMAL允许根据一些系统默认值定义的内容溢出,而NUMERIC则不允许。