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

Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions) SimBanco de Dados SQL do AzureAzure SQL DatabaseYesBanco de Dados SQL do AzureAzure SQL Database SimInstância Gerenciada do Azure SQLAzure SQL Managed InstanceYesInstância Gerenciada do Azure SQLAzure SQL Managed Instance simAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics simParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions) SimBanco de Dados SQL do AzureAzure SQL DatabaseYesBanco de Dados SQL do AzureAzure SQL Database SimInstância Gerenciada do Azure SQLAzure SQL Managed InstanceYesInstância Gerenciada do Azure SQLAzure SQL Managed Instance simAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics simParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Tipos de dados numéricos exatos que usam dados inteiros.Exact-number data types that use integer data. Para economizar espaço no banco de dados, use o menor tipo de dados que pode conter todos os valores possíveis de maneira confiável.To save space in the database, use the smallest data type that can reliably contain all possible values. Por exemplo, tinyint é suficiente para a idade de uma pessoa porque não existe ninguém que viva por mais de 255 anos.For example, tinyint would be sufficient for a person's age because no one lives to be more than 255 years old. Mas tinyint não é suficiente para a idade de um edifício, porque um edifício pode ter mais de 255 anos.But tinyint would not be sufficient for a building's age because a building can be more than 255 years old.

Tipo de dadosData type IntervaloRange ArmazenamentoStorage
bigintbigint -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 -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 -2^15 (-32.768) a 2^15-1 (32.767)-2^15 (-32,768) to 2^15-1 (32,767) 2 bytes2 Bytes
tinyinttinyint 0 a 2550 to 255 1 byte1 Byte

ComentáriosRemarks

O tipo de dados int é o tipo de dados inteiros primário do SQL ServerSQL Server.The int data type is the primary integer data type in SQL ServerSQL Server. O tipo de dados bigint deve ser usado quando valores inteiros podem exceder o intervalo ao qual tipo de dados int dá suporte.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 ajusta entre smallmoney e int no gráfico de precedência de tipo de dados.bigint fits between smallmoney and int in the data type precedence chart.

As funções retornam bigint somente se a expressão de parâmetro é um tipo de dados bigint.Functions return bigint only if the parameter expression is a bigint data type. SQL ServerSQL Server não promove automaticamente outros tipos de dados inteiros (tinyint, smallint e int) para bigint.does not automatically promote other integer data types (tinyint, smallint, and int) to bigint.

Cuidado

Ao usar os operadores aritméticos +, -, *, / ou % para executar a conversão implícita ou explícita de valores constantes int, smallint, tinyint ou bigint nos tipos de dados float, real, decimal ou numeric, as regras que o SQL ServerSQL Server aplica ao calcular o tipo de dados e a precisão dos resultados da expressão diferem, dependendo do fato de a consulta ser ou não automaticamente parametrizada.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.

Portanto, as expressões semelhantes em consultas podem, às vezes, produzir resultados diferentes.Therefore, similar expressions in queries can sometimes produce different results. Quando uma consulta não é automaticamente parametrizada, o valor de constante é primeiramente convertido em numeric, cuja precisão é apenas grande o suficiente para conter o valor da constante, antes de fazer a conversão no tipo de dados 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 exemplo, o valor de constante 1 é convertido em numeric (1, 0) e o valor de constante 250 é convertido em 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).

Quando uma consulta é automaticamente parametrizada, o valor de constante sempre é convertido em numeric (10, 0) antes da conversão no tipo de dados final.When a query is autoparameterized, the constant value is always converted to numeric (10, 0) before converting to the final data type. Quando o operador / estiver envolvido, não apenas a precisão do tipo do resultado pode diferir entre consultas semelhantes, mas também o valor do resultado.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 exemplo, o valor do resultado de uma consulta automaticamente parametrizada que inclui a expressão SELECT CAST (1.0 / 7 AS float) diferirá do valor do resultado da mesma consulta que não é automaticamente parametrizada, porque os resultados da primeira serão truncados para se ajustarem ao tipo de dados 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.

Convertendo dados inteirosConverting integer data

Quando integers são convertidos implicitamente em um tipo de dados character, se o integer for muito grande para ser ajustado no campo de caractere, o SQL ServerSQL Server digitará o caractere ASCII 42, o 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 (*).

As constantes de inteiro maiores que 2.147.483.647 são convertidas no tipo de dados decimal, não no tipo de dados bigint.Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type. O exemplo a seguir mostra que quando o valor limite é excedido, o tipo de dados do resultado é alterado de um int para um 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 ;  

Este é o conjunto de resultados.Here is the result set.

Result1      Result2  
1073741823   1073741824.500000  

ExemplosExamples

O exemplo a seguir cria uma tabela usando os tipos de dados bigint, int, smallint e tinyint.The following example creates a table using the bigint, int, smallint, and tinyint data types. Os valores são inseridos em cada coluna e retornados na instrução 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;  

Este é o conjunto de resultados.Here is the result set.

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

Confira tambémSee also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CAST e 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)