SQL Server中的DECIMAL和NUMERIC有什么区别吗?

Dha*_*ana 122 sql-server sqldatatypes

SQL Server中的DECIMAL和NUMERIC数据类型有什么区别吗?

什么时候应该使用DECIMAL和NUMERIC?

Guf*_*ffa 101

他们是一样的.数字在功能上等同于十进制.

MSDN:十进制和数字

  • @vstrien:我能找到的唯一区别是,在SQL-92标准中,`decimal`与声明的精确*精确*,而`numeric`至少**与声明的一样精确.在SQL Server中,两者都与声明的一样精确,即它不使用标准允许的"数字"的灵活性. (22认同)
  • 但请注意,SQL Server不会将它们视为可互换的:例如,如果您有"DECIMAL(18,0)"格式的"父"列,并且您尝试添加**外键**它引用了"NUMERIC(18,0)"格式的列,您将得到错误"Column"<referencedColumn>'与引用列"<parentTable>.<parentColumn>"在外键中的数据类型不同<yourKeyName>'`.它们必须都是NUMERIC(x,y),或者都是DECIMAL(x,y). (16认同)
  • @Guffa:你的答案与http://stackoverflow.com/a/759606/14731引用的SQL2003标准相矛盾.具体来说,`decimal`至少**与声明的一样精确,而`numeric`是*精确*与声明的精确. (7认同)
  • 功能对等与平等不同.实际上,在MS6232A课程的教师幻灯片中,添加了一条评论,它们几乎相同.同时,Microsoft没有就这一个或另一个做出推荐(但是DECIMAL更有意义,因为它是标准的数据类型而不是Sybase的遗留数据类型).仍然想知道真正的区别(幕后):-). (4认同)
  • @Gili:是的,在审查原始资料时,我确实认为你确实交换了它们. (3认同)

Joa*_*man 40

这就是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>.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是SQL标准,而不是SQL Server如何实现它的描述. (6认同)
  • Wiscorp有下载标准的草稿版本(http://www.wiscorp.com/sql_2003_standard.zip),如果你想要最终版本,你必须购买它(http://en.wikipedia.org/wiki/ SQL2003#Documentation_availability). (2认同)
  • 很高兴知道这是微软决定忽视的另一条规则.:) (2认同)

kev*_*ers 11

据我所知,NUMERIC和DECIMAL数据类型没有区别.它们是彼此的同义词,任何一个都可以使用.DECIMAL和NUMERIC数据类型是具有固定精度和比例的数字数据类型.

编辑:

对一些同事说,也许它与DECIMAL是ANSI SQL标准有关,而NUMERIC是Mircosoft更喜欢的编程语言中常见的....也许 ;)