Risposte:
Loro sono la stessa cosa. Numerico è funzionalmente equivalente al decimale.
MSDN: decimale e numerico
decimalè esattamente preciso quanto dichiarato, mentre numericè di almeno preciso quanto dichiarato. In SQL Server entrambi sono esattamente precisi come dichiarato, ovvero non utilizza la flessibilità numericconsentita dallo standard.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'. Devono essere entrambi NUMERIC (x, y) o entrambi DECIMAL (x, y).
decimalè preciso almeno quanto dichiarato, mentre numericè esattamente preciso come dichiarato.
Questo è ciò che dice quindi lo standard SQL2003 (§6.1 Tipi di dati) sui due:
<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>.
Per quanto ne sappia, non vi è alcuna differenza tra i tipi di dati NUMERIC e DECIMAL. Sono sinonimi l'uno dell'altro e si può usare uno dei due. I tipi di dati DECIMAL e NUMERIC sono tipi di dati numerici con precisione e scala fisse.
Modificare:
Parlare con alcuni colleghi forse ha qualcosa a che fare con DECIMAL essendo lo standard ANSI SQL e NUMERIC essendo uno che Mircosoft preferisce come si trova più comunemente nei linguaggi di programmazione. ...Può essere ;)
Sono sinonimi, nessuna differenza. I tipi di dati decimali e numerici sono tipi di dati numerici con precisione e scala fisse.
-- 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
La risposta di Joakim Backman è specifica, ma ciò può portare ulteriore chiarezza.
C'è una differenza minore. Secondo SQL For Dummies, 8th Edition (2013):
Il tipo di dati DECIMAL è simile a NUMERIC. ... La differenza è che l'implementazione può specificare una precisione maggiore di quella specificata; in tal caso, l'implementazione utilizza una precisione maggiore. Se non si specifica la precisione o la scala, l'implementazione utilizza valori predefiniti, come nel caso del tipo NUMERICO.
Sembra che la differenza su alcune implementazioni di SQL risieda nell'integrità dei dati. DECIMAL consente l'overflow da ciò che è definito sulla base di alcune impostazioni predefinite del sistema, mentre NUMERIC no.