Respostas:
Eles são os mesmos. Numérico é funcionalmente equivalente a decimal.
MSDN: decimal e numérico
decimal
é exatamente tão preciso quanto declarado, enquanto numeric
é pelo menos tão preciso quanto declarado. No SQL Server, ambos são exatamente tão precisos quanto declarados, ou seja, não usam a flexibilidade numeric
permitida pelo padrão.
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
. Eles devem ser NUMERIC (x, y) ou DECIMAIS (x, y).
decimal
é pelo menos tão preciso quanto declarado, enquanto numeric
é exatamente tão preciso quanto declarado.
Isto é o que o padrão SQL2003 (§6.1 Tipos de Dados) diz sobre os dois:
<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>.
Que eu saiba, não há diferença entre os tipos de dados NUMERIC e DECIMAL. Eles são sinônimos um do outro e qualquer um deles pode ser usado. Os tipos de dados DECIMAL e NUMÉRICO são tipos de dados numéricos com precisão e escala fixas.
Editar:
Falando com alguns colegas, talvez isso tenha algo a ver com DECIMAL sendo o padrão ANSI SQL e NUMERIC sendo o que a Mircosoft prefere, pois é mais comum em linguagens de programação. ...Talvez ;)
Eles são sinônimos, nenhuma diferença.Tipos de dados decimais e numéricos são tipos de dados numéricos com precisão e escala fixas.
-- 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
A resposta de Joakim Backman é específica, mas isso pode trazer mais clareza.
Há uma pequena diferença. Conforme SQL For Dummies, 8ª edição (2013):
O tipo de dados DECIMAL é semelhante a NUMERIC. ... A diferença é que sua implementação pode especificar uma precisão maior do que a que você especifica - nesse caso, a implementação usa a maior precisão. Se você não especificar precisão ou escala, a implementação utilizará valores padrão, como ocorre com o tipo NUMERIC.
Parece que a diferença em algumas implementações do SQL está na integridade dos dados. DECIMAL permite o estouro do que é definido com base em alguns padrões do sistema, enquanto NUMERIC não.