¿Hay alguna diferencia entre los tipos de datos DECIMAL y NUMERIC en SQL Server?¿Hay alguna diferencia entre DECIMAL y NUMERIC en SQL Server?
¿Cuándo debo usar DECIMAL y cuándo NUMERIC?
¿Hay alguna diferencia entre los tipos de datos DECIMAL y NUMERIC en SQL Server?¿Hay alguna diferencia entre DECIMAL y NUMERIC en SQL Server?
¿Cuándo debo usar DECIMAL y cuándo NUMERIC?
Son lo mismo. Numérico es funcionalmente equivalente a decimal.
MSDN: decimal and numeric
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 ...;)
Re la edición: Nope - vea la respuesta de @JoakimBackman anterior - cita el estándar SQL con NUMERIC y DECIMAL. – DaveBoltman
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>.
Tiene un enlace para esto por favor? – gbn
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). –
Tenga en cuenta que este es el estándar SQL, no una descripción de cómo SQL Server lo implementa. – Guffa
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
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.
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
@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
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). –