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

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Tipos de datos numéricos exactos que utilizan datos enteros.Exact-number data types that use integer data. 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.To save space in the database, use the smallest data type that can reliably contain all possible values. 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,For example, tinyint would be sufficient for a person's age because no one lives to be more than 255 years old. 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.But tinyint would not be sufficient for a building's age because a building can be more than 255 years old.

Tipo de datosData type IntervaloRange StorageStorage
bigintbigint De -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807)-2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 bytes8 Bytes
intint De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647)-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 bytes4 Bytes
smallintsmallint De -2^15 (-32.768) a 2^15-1 (32.767)-2^15 (-32,768) to 2^15-1 (32,767) 2 bytes2 Bytes
tinyinttinyint De 0 a 2550 to 255 1 byte1 Byte

NotasRemarks

El tipo de datos int es el principal tipo de datos de valores enteros de SQL ServerSQL Server.The int data type is the primary integer data type in SQL ServerSQL 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.The bigint data type is intended for use when integer values might exceed the range that is supported by the int data type.

bigint se encuentra entre smallmoney y int en el gráfico de prioridad de tipo de datos.bigint fits between smallmoney and int in the data type precedence chart.

Las funciones solo devuelven bigint si la expresión de parámetro es un tipo de datos bigint.Functions return bigint only if the parameter expression is a bigint data type. SQL ServerSQL Server no promueve automáticamente otros tipos de datos enteros (tinyint, smallint e int) en bigint.does not automatically promote other integer data types (tinyint, smallint, and int) to 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 ServerSQL 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.When you use the +, -, *, /, or % arithmetic operators to perform implicit or explicit conversion of int, smallint, tinyint, or bigint constant values to the float, real, decimal or numeric data types, the rules that SQL ServerSQL Server applies when it calculates the data type and precision of the expression results differ depending on whether the query is autoparameterized or not.

Por lo tanto, expresiones similares en las consultas pueden generar resultados diferentes.Therefore, similar expressions in queries can sometimes produce different results. 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.When a query is not autoparameterized, the constant value is first converted to numeric, whose precision is just large enough to hold the value of the constant, before converting to the specified data type. Por ejemplo, el valor constante 1 se convierte en numeric (1, 0) y el valor constante 250 se convierte en numeric (3, 0) .For example, the constant value 1 is converted to numeric (1, 0), and the constant value 250 is converted to 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.When a query is autoparameterized, the constant value is always converted to numeric (10, 0) before converting to the final data type. 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.When the / operator is involved, not only can the result type's precision differ among similar queries, but the result value can differ also. 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) .For example, the result value of an autoparameterized query that includes the expression SELECT CAST (1.0 / 7 AS float), differs from the result value of the same query that is not autoparameterized, because the results of the autoparameterized query, are truncated to fit into the numeric (10, 0) data type.

Convertir datos enterosConverting integer data

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 ServerSQL Server escribe el carácter ASCII 42, el asterisco (*).When integers are implicitly converted to a character data type, if the integer is too large to fit into the character field, SQL ServerSQL Server enters ASCII character 42, the asterisk (*).

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.Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type. 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.The following example shows that when the threshold value is exceeded, the data type of the result changes from an int to a decimal.

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

El conjunto de resultados es el siguiente.Here is the result set.

Result1      Result2  
1073741823   1073741824.500000  

EjemplosExamples

En el ejemplo siguiente se crea una tabla con los tipos de datos bigint, int, smallint y tinyint.The following example creates a table using the bigint, int, smallint, and tinyint data types. Se insertan valores en cada columna y se devuelven en la instrucción SELECT.Values are inserted into each column and returned in the SELECT statement.

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.Here is the result set.

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

Vea tambiénSee also

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