int, bigint, smallint e tinyint (Transact-SQL)
Tipos de dados numéricos exatos que usam dados inteiros.
Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual). |
Tipo de dados |
Intervalo |
Armazenamento |
---|---|---|
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.
Aviso
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
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, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;
Aqui está o conjunto de resultados.
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807 214483647 32767 255
(1 row(s) affected)
Consulte também
Referência
DECLARE @local\_variable (Transact-SQL)