Tipos de datos en SQL Server
En esta sección repasaremos los tipos de datos disponibles y aplicables en Transact-SQL divididos por categorías.
Numéricos
-
INT: Datos numéricos enteros con una capacidad máxima de almacenamiento de 4 bytes, lo que engloba un abanico comprendido entre el -2.147.483.648 y 2.147.483.647 Es el principal y más utilizado tipo de dato para almacenar números enteros.
-
BIGINT: Datos numéricos enteros con una capacidad máxima de almacenamiento de 8 bytes, lo que engloba un abanico comprendido entre el -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807 Con fin de ahorrar recursos y definir un modelo más eficiente,
bigint
solo deberá ser utilizado para guardar valores enteros que excedan el valor máximo de otros tipos de datos numéricos enteros. -
SMALLINT: Datos numéricos enteros con una capacidad máxima de almacenamiento de 2 bytes, lo que engloba un abanico comprendido entre el -32.768 y 32.767.
-
TINYINT: Datos numéricos enteros con una capacidad máxima de almacenamiento de 1 bytes, lo que engloba un abanico comprendido entre el 0 y 255. Es el más eficiente pero también el más limitado lo cual hace que deba utilizarse en casos específicos, por ejemplo, para guardar la edad de una persona o los días de cada mes.
-
BIT: Tipo de dato que solo puede almacenar los valores 0 (FALSO), 1 (VERDADERO) o
NULL
. Funciona igual que el tipo boolean de otros sistemas independientes. -
DECIMAL: Datos numéricos con precisión y escalas fijas. La precisión estará comprendida entre 1 y 38 y el tamaño de almacenamiento variará en función de la precisión, siendo el mínimo de bytes 5 y el máximo 17.
-
NUMERIC: Tipo de dato funcionalmente sinónimo a
DECIMAL
, pudiendo utilizarse indistintamente. -
MONEY: Tipo de dato que representa valores monetarios o de moneda con una capacidad máxima de 8 bytes, lo que engloba un abanico comprendido entre el -922.337.203.685.477,5808 y el 922.337.203.685.477,5807.
-
SMALLMONEY: Tipo de dato que representa valores monetarios o de moneda con una capacidad máxima de 4 bytes, lo que engloba un abanico comprendido entre el -214.748,3648 y el 214.748,3647.
-
FLOAT: Datos numéricos aproximados de coma flotante. Donde n de
FLOAT[(n)]
, dependerá la precisión y capacidad máxima de almacenamiento 4 - 8 bytes. El valor de n comprenderá los valores entre 1 y 53, siendo 53 el valor por defecto. -
REAL: Datos numéricos aproximados de coma flotante. El tipo real será el equivalente a
FLOAT(24)
lo que definirá una capacidad de almacenamiento de 4 bytes.
Cadenas de caracteres
No unicode
-
CHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño fijo. Donde n de
CHAR(n)
indica el tamaño de la cadena de bytes comprendido entre el valor de 1 a 8000. -
VARCHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño variable. Donde n de
VARCHAR(n)
indica el tamaño de la cadena de bytes comprendido entre el valor de 1 a 8000. -
TEXT: Para el almacenamiento de valores de gran tamaño de datos de longitud fija y variable de caracteres y binarios no Unicode. El tamaño de almacenamiento será de 2.147.483.647 bytes.
El tipo de dato text
será eliminado en versiones futuras de SQL-Server por lo que se recomienda descartar su uso actualmente.
Unicode
-
NCHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño fijo. Donde n de
NCHAR(n)
indica el tamaño de la cadena de bytes comprendido entre el valor de 1 a 4000. -
NVARCHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño variable. Donde n de
NVARCHAR(n)
indica el tamaño de la cadena de bytes comprendido entre el valor de 1 a 4000. -
NTEXT: Para el almacenamiento de valores de gran tamaño de datos de longitud fija y variable de caracteres y binarios Unicode. El tamaño de almacenamiento será de 1.073.741.823 bytes.
El tipo de dato ntext
será eliminado en versiones futuras de SQL-Server por lo que se recomienda descartar su uso actualmente.
Cadenas binarias
-
BINARY: Para el almacenamiento de datos binarios de longitud fija. Donde n de
BINARY(n)
indica el tamaño de longitud, comprendida en un valor entre 1 a 8000 bytes. -
VARBINARY: Para el almacenamiento de datos binarios de longitud variable. Donde n de
VARBINARY(n)
indica el tamaño de longitud, comprendida en un valor entre 1 a 8000 bytes. -
IMAGE: Para el almacenamiento de datos binarios de longitud variable con un tamaño de almacenamiento de 2.147.483.647 bytes.
El tipo de dato image
será eliminado en versiones futuras de SQL-Server por lo que se recomienda descartar su uso actualmente.
Fecha y hora
-
DATE: Para almacenar una fecha en formato por defecto: YYYY-MM-DD. Dicho formato podrá ser modificado utilizando máscaras de entrada.
-
DATETIME: Para almacenar una fecha y hora con fracciones de segundo en formato por defecto AAAA-MM-DD hh:mm:ss. Dicho formato podrá ser modificado utilizando máscaras de entrada.
-
SMALLDATETIME: Para almacenar una fecha y hora sin fracciones de segundo en formato por defecto AAAA-MM-DD hh:mm:ss. Los segundos siempre estarán a O (:00).
-
DATETIME2: Para almacenar una fecha y hora con un rango y precisión mayor que
DATETIME
, en formato por defecto AAA-MM-DD hh:mm:ss[nnnnnnn]. Dicho formato podrá ser modificado utilizando máscaras de entrada. -
DATETIMEOFFSET: Para almacenar una fecha y hora con un rango y precisión como
DATETIME2
, agregando, además, reconocimiento de la zona horaria basado en UTC (hora universal coordinada u hora del meridiano de Greenwich). El formato por defecto será AAAA-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm. -
TIME: Para almacenar una hora en formato por defecto: hh:mm:ss[.nnnnnnn].
Otras
-
CURSOR: Para recorrer registros y resultados de una consulta. Ver en más detalle en la sección de CURSOR.
-
ROWVERSION: Para exponer números binarios generados automáticamente utilizado usualmente para indicar la versión de las filas de una tabla.
-
HIERARCHYID: Para representar la posición en una jerarquía de árbol.
-
UNIQUEIDENTIFIER: Para almacenar identificadores únicos globales (GUID).
-
SQL_VARIANT: Para almacenar valores de varios tipos de datos admitidos en SQL Server.
-
XML: Para almacenar datos XML.
-
TABLE: Para almacenar temporalmente un conjunto de filas y devolver el resultado con valores de tabla.
-
GEOMETRÍA ESPACIAL: Para almacenar datos espaciales planares en un sistema de coordenadas euclídeo.
-
GEOGRAFÍA ESPACIAL: Para almacenar datos espaciales elipsoidales como coordenadas de latitud y longitud GPS.