2009-04-17 37 views

Respuesta

96

Son lo mismo. Numérico es funcionalmente equivalente a decimal.

MSDN: decimal and numeric

+3

La equivalencia funcional no es lo mismo que la igualdad. De hecho, en las diapositivas del instructor del curso MS6232A, se agrega un comentario que dice que son CASI iguales. Al mismo tiempo, Microsoft no hace ninguna recomendación con respecto a uno u otro (sin embargo, DECIMAL tiene más sentido, ya que es un tipo de datos estándar en lugar de un tipo de datos heredado de Sybase). Todavía me pregunto cuál es la verdadera diferencia (detrás de las pantallas) :-). – vstrien

+22

@vstrien: La única diferencia que puedo encontrar es que en el estándar SQL-92 'decimal' es * exactamente * tan preciso como declarado, mientras que' numérico' es * al menos * tan preciso como declarado. En SQL Server ambos son exactamente tan precisos como declarado, es decir, no utiliza la flexibilidad para 'numérico' que permite el estándar. – Guffa

+14

NOTA, sin embargo, SQL Server no los trata como intercambiables: si, por ejemplo, tiene una columna "principal" en formato "DECIMAL (18,0)" e intenta agregar una ** clave externa ** para ello, que hace referencia a una columna en formato "NUMERIC (18,0)", obtendrá el error 'Column '' no es el mismo tipo de datos que la columna de referencia '. ' en clave externa ' ''. Deben ser NUMÉRICOS (x, y) o ambos ser DECIMALES (x, y). –

10

Que yo sepa, no hay ninguna diferencia entre los tipos de datos numéricos y decimales. Son sinónimos entre sí y cualquiera de ellos se puede usar. Los tipos de datos DECIMAL y NUMERIC son tipos de datos numéricos con precisión y escala fija.

Editar:

En declaraciones a unos colegas quizá su tiene algo que ver con DECIMAL siendo el estándar ANSI SQL y NUMERIC ser uno Mircosoft prefiere como su más común en los lenguajes de programación. Tal vez ...;)

+0

Re la edición: Nope - vea la respuesta de @JoakimBackman anterior - cita el estándar SQL con NUMERIC y DECIMAL. – DaveBoltman

37

Esto es lo que a continuación estándar SQL2003 (apartado 6.1 Tipos de datos) dice acerca de los dos:

<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>. 
+0

Tiene un enlace para esto por favor? – gbn

+2

Wiscorp tiene una versión borrador del estándar para descarga (http://www.wiscorp.com/sql_2003_standard.zip), si desea la versión final, debe comprarla (http://en.wikipedia.org/wiki/SQL2003 # Documentation_availability). –

+6

Tenga en cuenta que este es el estándar SQL, no una descripción de cómo SQL Server lo implementa. – Guffa

0

Ellos son sinónimos, no hay diferencia en all.Decimal y tipos de datos numéricos son numéricos tipos de datos con precisión y escala fija

-- 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 
0

La respuesta de Joakim Backman es específica, pero esto puede aportar una mayor claridad.

Hay una pequeña diferencia. Según SQL For Dummies, 8ª edición (2013):

El tipo de datos DECIMAL es similar a NUMERIC. ... La diferencia es que su implementación puede especificar una precisión mayor que la que especifica; de ser así, la implementación utiliza la mayor precisión. Si no especifica precisión o escala, la implementación usa los valores predeterminados , como lo hace con el tipo NÚMERO.

Parece que la diferencia en algunos implementaciones de SQL está en la integridad de datos. DECIMAL permite el desbordamiento de lo que se define en función de algunos valores predeterminados del sistema, mientras que NUMERIC no lo hace.

Cuestiones relacionadas