回答:
彼らは同じです。数値は機能的に小数と同等です。
MSDN:10進数と数値
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データ型)がこの2つについて述べていることです。
<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がプログラミング言語でより一般的に見られるものとして好んでいるものの1つであることと関係があります。...多分 ;)
それらは同義語であり、まったく違いはありません.10進数と数値のデータ型は、固定精度と位取りを持つ数値データ型です。
-- 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はそうではありません。