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)

См. также

Справочник

ALTER TABLE (Transact-SQL)

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

CREATE TABLE (SQL Server)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)