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

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

Типы точных числовых данных, использующие целые значения. Для экономии места в базе данных используйте тип данных наименьшего размера, который гарантирует возможность хранения всех возможных значений. Например, tinyint будет достаточно для возраста человека, потому что никто не живет более 255 лет. Но крошечный не достаточно для возраста здания, потому что здание может быть более 255 лет.

Тип данных Диапазон Выражение диапазона Хранилище
bigint От −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 -2^63 до 2^63-1 8 байт
int От −2 147 483 648 до 2 147 483 647 -2^31 до 2^31-1 4 байта
smallint От −32 768 до 32 767 -2^15 до 2^15-1 2 байта
tinyint От 0 до 255 2^0-1 до 2^8-1 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 data, правила, которые SQL Server применяет при вычислении типа данных и точности результатов выражения различаются в зависимости от того, является ли запрос автопараметризованным или нет.

Поэтому одинаковые выражения в различных запросах могут иногда возвращать различные результаты. Если запрос не автопараметризован, константа сначала преобразуется в десятичное значение, точность которого достаточно велика, чтобы сохранить значение константы перед преобразованием в указанный тип данных. Например, константное значение 1 преобразуется в десятичное (1,0), а константное значение 250 преобразуется в десятичное (3,0).

При автопараметризации запроса константа всегда преобразуется в десятичное (10,0) перед преобразованием в окончательный тип данных. При использовании оператора «/» могут различаться как точность, так и само значение результата. Например, значение результата автопараметризованного запроса, включающее выражениеSELECT CAST (1.0 / 7 AS float), отличается от значения результата того же запроса, который не является автопараметризованным, так как результаты автопараметризованного запроса усечены, чтобы поместиться в тип данных десятичного (10,0).

Тип данных tinyint не поддерживается в Microsoft Fabric.

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

Если целые числа неявно преобразуются в тип данных символов, если целое число слишком велико, чтобы поместиться в поле символов, 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,
    2147483647,
    32767,
    255
);
GO

SELECT MyBigIntColumn,
    MyIntColumn,
    MySmallIntColumn,
    MyTinyIntColumn
FROM dbo.MyTable;

Результирующий набор:

MyBigIntColumn       MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807  2147483647  32767            255