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.
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 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
DECLARE @local\_variable (Transact-SQL)