int, bigint, smallint y tinyint (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Tipos de datos numéricos exactos que utilizan datos enteros. Para ahorrar espacio en la base de datos, use el tipo de datos más pequeño que puede contener todos los valores posibles de manera confiable. Por ejemplo, con tinyint bastaría en el caso de la edad de una persona, puesto que nadie vive más de 255 años, pero no sería suficiente en el caso de la antigüedad de un edificio, porque un edificio puede tener más de 255 años.

Tipo de datos Intervalo Expresión de intervalo Storage
bigint De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 -2^63 a 2^63-1 8 bytes
int De -2.147.483.648 a 2.147.483.647 -2^31 a 2^31-1 4 bytes
smallint De -32 768 a 32 767 -2^15 a 2^15-1 2 bytes
tinyint De 0 a 255 2^0-1 a 2^8-1 1 byte

Observaciones

El tipo de datos int es el principal tipo de datos de valores enteros de SQL Server. El tipo de datos bigint está pensado para usarse cuando los valores enteros pueden exceder el intervalo admitido por el tipo de datos int.

bigint se encuentra entre smallmoney y int en el gráfico de prioridad de tipo de datos.

Las funciones solo devuelven bigint si la expresión de parámetro es un tipo de datos bigint. SQL Server no promueve automáticamente otros tipos de datos enteros (tinyint, smallint e int) en bigint.

Precaución

Cuando se usan los operadores aritméticos +, -, *, / o % para llevar a cabo conversiones implícitas o explícitas de valores constantes int, smallint, tinyint o bigint en tipos de datos float, real, decimal o numeric, las reglas que aplica SQL Server al calcular el tipo de datos y la precisión de los resultados de la expresión varían dependiendo de si la consulta tiene parámetros automáticos o no.

Por lo tanto, expresiones similares en las consultas pueden generar resultados diferentes. Cuando una consulta no tiene parámetros automáticos, el valor constante primero se convierte en numeric, cuya precisión es lo suficientemente grande como para conservar el valor de la constante, antes de realizar la conversión al tipo de datos especificado. Por ejemplo, el valor constante 1 se convierte en numeric (1, 0) y el valor constante 250 se convierte en numeric (3, 0) .

Cuando una consulta tiene parámetros automáticos, el valor constante siempre se convierte en numeric (10, 0) antes de convertirse en el tipo de datos final. Cuando se utiliza el operador /, no solo puede diferir la precisión del tipo de los resultados entre consultas similares, sino que también puede variar el valor de los resultados. Por ejemplo, el valor de los resultados de una consulta con parámetros automáticos que incluye la expresión SELECT CAST (1.0 / 7 AS float) varía con respecto a la misma consulta cuando no tenga parámetros automáticos, puesto que los resultados de la primera se truncan para ajustarse al tipo de datos numeric (10, 0) .

El tipo de datos tinyint no se admite en Microsoft Fabric.

Convertir datos enteros

Cuando se convierten implícitamente enteros en un tipo de datos de caracteres, si el entero es demasiado grande para ajustarse al campo de carácter, SQL Server escribe el carácter ASCII 42, el asterisco (*).

Las constantes de enteros mayores que 2.147.483.647 se convierten en el tipo de datos decimal, no en el tipo de datos bigint. En el siguiente ejemplo se muestra que, cuando se supera el valor de umbral, el tipo de datos del resultado cambia de int a decimal.

SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;  

El conjunto de resultados es el siguiente:

Result1      Result2  
1073741823   1073741824.500000  

Ejemplos

En el ejemplo siguiente se crea una tabla con los tipos de datos bigint, int, smallint y tinyint. Se insertan valores en cada columna y se devuelven en la instrucción SELECT.

CREATE TABLE dbo.MyTable  
(  
  MyBigIntColumn BIGINT  
,MyIntColumn  INT
,MySmallIntColumn SMALLINT
,MyTinyIntColumn TINYINT
);  
  
GO  
  
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 2147483647,32767,255);  
 GO  
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn  
FROM dbo.MyTable;  

El conjunto de resultados es el siguiente:

MyBigIntColumn       MyIntColumn MySmallIntColumn MyTinyIntColumn  
-------------------- ----------- ---------------- ---------------  
9223372036854775807  2147483647  32767            255  
  
(1 row(s) affected)  

Consulte también

ALTER TABLE (Transact-SQL)
CAST y CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.types (Transact-SQL)