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

Типы точных числовых данных, использующие целые значения.

Тип данных

Диапазон

Хранилище

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). Дополнительные сведения о параметризованных запросах см. в разделе Простая параметризация.