Share via


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, o tinyint seria suficiente para a idade de uma pessoa, porque ninguém vive para ter mais de 255 anos. Mas o 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. O SQL Server não promove automaticamente outros tipos de dados inteiros (tinyint, smallint e int) para bigint.

Conversão e parametrização

Quando você usa os operadores , -, , /*, ou % aritméticos para executar 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 numérico, as regras que o SQL Server aplica quando calcula o tipo de dados e a precisão dos resultados da expressão diferem dependendo se a consulta é autoparametrizada ou não.

Portanto, as expressões semelhantes em consultas podem, às vezes, produzir resultados diferentes. Quando uma consulta não é autoparametrizada, o valor da constante é primeiro convertido em decimal, cuja precisão é grande o suficiente para manter o valor da constante, antes de converter para o tipo de dados especificado. Por exemplo, o valor 1 da constante é convertido em decimal(1,0) e o valor 250 constante é convertido em decimal(3,0).

Quando uma consulta é autoparametrizada, o valor constante é sempre convertido em decimal(10,0) antes de converter para o 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 de resultado de uma consulta autoparametrizada que inclui a expressão SELECT CAST (1.0 / 7 AS float), difere do valor de resultado da mesma consulta que não é autoparametrizada, porque os resultados da consulta autoparametrizada são truncados para caber no tipo de dados decimal(10,0).

O tipo de dados tinyint não é suportado no Microsoft Fabric.

Converter dados inteiros

Quando inteiros são convertidos implicitamente em um tipo de dados de caractere, se o inteiro for muito grande para caber no campo de caractere, o SQL Server usará 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