int, bigint, smallint и tinyint (Transact-SQL)
Типы точных числовых данных, использующие целые значения.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Тип данных |
Диапазон |
Хранилище |
---|---|---|
bigint |
от -2^63 (-9 223 372 036 854 775 808) до 2^63-1 (9 223 372 036 854 775 807) |
8 байт |
int |
от –2^31 (–2 147 483 648) до 2^31-1 (2 147 483 647) |
4 байта |
smallint |
от -2^15 (-32 768) до 2^15-1 (32 767) |
2 байта |
tinyint |
от 0 до 255 |
1 байт |
Замечания
Тип данных int является основным типом целочисленных данных в SQL Server. Тип данных bigint используется для хранения значений, выходящих за диапазон, поддерживаемый типом данных int.
В таблице приоритетов типов данных тип bigint располагается между smallmoney и int.
Функции возвращают bigint только в случае, если выражение параметра имеет тип bigint. SQL Server не выполняет автоматического продвижения других целочисленных типов данных (tinyint, smallint и int) до bigint.
Предупреждение
При использовании таких арифметических операторов, как +, -, *, / или %, для явного или неявного преобразования констант типа int, smallint, tinyint и bigint в значения типа float, real, decimal и numeric в SQL Server используются различные правила определения типов данных и точности результата, зависящие от наличия автоматической параметризации запроса.
Поэтому одинаковые выражения в различных запросах могут иногда возвращать различные результаты.В случае отсутствия в запросе автоматической параметризации константа сначала преобразуется в значение типа numeric, точности которого хватает для ее хранения, а затем происходит преобразование в заданный тип данных.Например, константа 1 преобразуется в numeric (1, 0), а константа 250 — в numeric (3, 0).
При наличии в запросе автоматической параметризации константа всегда сначала преобразуется в значение типа numeric (10, 0), а затем в данные конечного типа.При использовании оператора «/» могут различаться как точность, так и само значение результата.Например, результат автопараметризованного запроса, включающего в себя выражение SELECT CAST (1.0 / 7 AS float), отличается от аналогичного запроса без автоматической параметризации, так как результаты выполнения автопараметризированного запроса усекаются до значений, соответствующих типу данных numeric (10, 0).
Преобразование целочисленных данных
При неявном преобразовании данных типа integer в данные типа character, если число слишком большое для символьного поля, SQL Server вставляет символ с кодом ASCII 42 — звездочку (*).
Целочисленные константы, превышающие 2 147 483 647, преобразуются в тип данных decimal, а не в bigint. Следующий пример демонстрирует изменение типа данных результата с int на decimal при превышении порогового значения.
SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;
Ниже приводится результирующий набор.
Result1 Result2
1073741823 1073741824.500000
Примеры
В следующем примере создается таблица, использующая типы данных bigint, int, smallint и tinyint. Значения вставляются в каждый столбец и возвращаются в инструкции 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;
Ниже приводится результирующий набор.
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807 214483647 32767 255
(1 row(s) affected)
См. также
Справочник
Функции CAST и CONVERT (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)