Articles

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

  • 09/08/2017
  • 3 minutes to read
    • M
    • j
    • c
    • M
    • i
    • +8

Applies to: simSQL Server (todas as versões) SimAzure SQL Database SimAzure SQL Instância Gerenciada simAzure Sinapse Analytics simParallel Data Warehouse

Exato-número de tipos de dados que usam dados de número inteiro. Para economizar espaço no banco de dados, use o menor tipo de dados que pode conter de forma confiável todos os valores possíveis. Por exemplo, tinyint seria suficiente para a idade de uma pessoa porque ninguém vive para ter mais de 255 anos de idade. Mas tinyint não seria suficiente para a idade de um edifício porque um edifício pode ter mais de 255 anos.

Data type Range Storage
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte

Remarks

The int data type is the primary integer data type in SQL Server. O tipo de dados bigint é destinado a ser usado quando os valores inteiros podem exceder o intervalo que é suportado pelo tipo de dados int.

bigint encaixa entre smallmoney e int no gráfico de precedência do tipo de dados.as funções

retornam bigint somente se a expressão do parâmetro for um tipo de dados bigint. O servidor SQL não promove automaticamente outros tipos de dados inteiros (tinyint, smallint e int) para o bigint.

Atenção

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

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

Quando uma consulta é autoparameterizada, o valor constante é sempre convertido para numérico (10, 0) antes de converter para o tipo de dados final. Quando o / operador está envolvido, não só a precisão do tipo de resultado pode diferir entre consultas similares, mas o valor do resultado também pode diferir. Por exemplo, o valor do resultado de uma automaticamente parametrizada consulta que inclui a expressão SELECT CAST (1.0 / 7 AS float), difere de valor do resultado da mesma consulta que não é automaticamente parametrizada, porque os resultados da automaticamente parametrizada consulta, são truncados para caber na numérico (10, 0) tipo de dados.

convertendo dados inteiros

quando os inteiros são implicitamente convertidos para um tipo de dados de caracteres, se o inteiro é demasiado grande para caber no campo de caracteres, o servidor SQL entra no carácter ASCII 42, o asterisco (*).

constantes inteiras superiores a 2,147,483,647 são convertidas para o tipo de dados decimais, não para o tipo de dados bigint. O exemplo seguinte mostra que quando o valor limiar é excedido, o tipo de dados do resultado muda de um int para uma casa decimal.

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

Aqui está o conjunto de resultados.

Result1 Result2 1073741823 1073741824.500000 

exemplos

o exemplo seguinte cria uma tabela usando os tipos de dados bigint, int, smallint e tinyint. Os valores são inseridos em cada coluna e devolvidos 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; 

Aqui está o conjunto de resultados.

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

Veja também:

ALTER TABLE (Transact-SQL)
CAST e CONVERT (Transact-SQL)
CRIAR TABELA (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.tipos (Transact-SQL)