Поделиться через


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

Преобразование целочисленных данных

При неявном преобразовании данных типа 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

См. также

Справочник

ALTER TABLE (Transact-SQL)

Функции CAST и CONVERT (Transact-SQL)

Инструкция CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)