Partilhar via


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

Tipos de dados numéricos exatos que usam dados inteiros.

Tipo de dados

Intervalo

Storage

bigint

-2^63 (-9,223,372,036,854,775,808) a 2^63-1 (9,223,372,036,854,775,807)

8 bytes

int

-2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647)

4 bytes

smallint

-2^15 (-32,768) a 2^15-1 (32,767)

2 bytes

tinyint

0 a 255

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 possam exceder o intervalo ao qual tipo de dados int oferece suporte.

bigint está 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 for um tipo de dados bigint. SQL Server não promove automaticamente outros tipos de dados de inteiro (tinyint, smallinte int) a bigint.

Observação sobre cuidadosCuidado

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 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.

Portanto, as expressões semelhantes em consultas podem, às vezes, produzir resultados diferentes. Quando uma consulta não for automaticamente parametrizada, o valor constante será primeiramente convertido em numeric, cuja precisão é apenas grande o bastante para conter o valor da constante, antes de converter no tipo de dados especificado. Por exemplo, o valor constante 1 é convertido em numeric (1, 0) e o valor constante 250 é convertido em numeric (3, 0).

Quando uma consulta for automaticamente parametrizada, o valor constante sempre será 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 inclua 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 que caibam no tipo de dados numeric (10, 0).

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 em 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 int para decimal.

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

Aqui está o conjunto de resultados.

Result1      Result2
1073741823   1073741824.500000

Consulte também

Referência

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)