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.