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 лет. Однако типа tinyint будет недостаточно для возраста зданий, так как они могут быть старше 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 в SQL Server используются правила определения типов данных и точности результата, зависящие от применения автоматической параметризации запроса.

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

При наличии в запросе автоматической параметризации константа всегда сначала преобразуется в значение типа numeric (10, 0), а затем в данные конечного типа. При использовании оператора «/» могут различаться как точность, так и само значение результата. Например, результат автопараметризованного запроса, включающего в себя выражение SELECT CAST (1.0 / 7 AS float), отличается от аналогичного запроса без автоматической параметризации, так как результаты выполнения автопараметризованного запроса усекаются до значений, соответствующих типу данных numeric (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  
  
(1 row(s) affected)  

См. также

Инструкция 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)