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

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Tipos de dados numéricos exatos que usam dados inteiros. 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. Por exemplo, tinyint é suficiente para a idade de uma pessoa porque não existe ninguém que viva por mais de 255 anos. Mas tinyint não é suficiente para a idade de um edifício, porque um edifício pode ter mais de 255 anos.

Tipo de dados Intervalo Expressão de intervalo Armazenamento
bigint -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 -2^63 a 2^63-1 8 bytes
int -2.147.483.648 a 2.147.483.647 -2^31 a 2^31-1 4 bytes
smallint -32.768 a 32.767 -2^15 a 2^15-1 2 bytes
tinyint 0 a 255 2^0-1 a 2^8-1 1 byte

Comentários

O tipo de dados int é o tipo de dados inteiros primário do SQL Server. O tipo de dados bigint deve ser usado quando valores inteiros podem exceder o intervalo ao qual tipo de dados int dá suporte.

bigint se ajusta entre smallmoney e int no gráfico de precedência de tipo de dados.

As funções retornam bigint somente se a expressão de parâmetro é um tipo de dados bigint. SQL Server não promove automaticamente outros tipos de dados inteiros (tinyint, smallint e int) para bigint.

Cuidado

Quando você usa os operadores aritméticos +, -, *, / ou % para realizar a conversão implícita ou explícita de valores constantes int, smallint, tinyint ou bigint para os tipos de dados float, real, decimal ou numeric, as regras que o SQL Server se aplica quando calcula o tipo de dados e a precisão dos resultados da expressão diferem dependendo do fato de a consulta ser parametrizada ou não.

Portanto, as expressões semelhantes em consultas podem, às vezes, produzir resultados diferentes. 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. Por exemplo, o valor de constante 1 é convertido em numeric (1, 0) e o valor de constante 250 é convertido em 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. 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. 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) .

Não há suporte para o tipo de dados tinyint no Microsoft Fabric.

Convertendo dados inteiros

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 Server digitará o caractere ASCII 42, o asterisco (*).

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. O exemplo a seguir mostra que quando o valor limite é excedido, o tipo de dados do resultado é alterado de um int para um decimal.

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

Este é o conjunto de resultados.

Result1      Result2  
1073741823   1073741824.500000  

Exemplos

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

Este é o conjunto de resultados.

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

Confira também

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