SQL Server中的DECIMAL和NUMERIC有什么不同?

SQL Server中的DECIMAL和NUMERIC数据types有什么不同?

我应该何时使用DECIMAL和NUMERIC?

他们是一样的。 数字在function上等同于十进制。

MSDN: 十进制和数字

这就是SQL2003标准(§6.1数据types)关于这两个方面所说的:

  <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数据types没有区别。 它们是彼此的同义词,任何一个都可以使用。 DECIMAL和NUMERIC数据types是具有固定精度和比例的数字数据types。

编辑:

说到几个同事,也许它与DECIMAL是ANSI SQL标准有关,NUMERIC是Mircosoft更喜欢的编程语言中更常见的。 …也许 ;)

它们是同义词,根本没有区别。数字和数字数据types是具有固定精度和尺度的数字数据types。

 -- 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,第八版(2013):

DECIMAL数据types与NUMERIC类似。 …区别在于您的实现可能会指定比您指定的更高的精度 – 如果是,则实现使用更高的精度。 如果不指定精度或小数位数,则实现使用默认值,就像使用NUMERICtypes一样。

看起来,SQL的某些实现的差异在于数据完整性。 DECIMAL允许根据某些系统默认值定义的溢出,NUMERIC不允许。