Dela via


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

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Exakta datatyper som använder heltalsdata. Om du vill spara utrymme i databasen använder du den minsta datatypen som på ett tillförlitligt sätt kan innehålla alla möjliga värden. Till exempel skulle tinyint vara tillräckligt för en liten uppslagstabell med statusvärden, eftersom den kan lagra så många som 256 rader. Men tinyint räcker inte för en lista över anställda, eftersom ditt företag kan ha hundratals eller tusentals anställda.

Datatyp Range Intervalluttryck Storage
bigint -9 223 372 036 854 775 808 till 9 223 372 036 854 775 807 -2^63 till 2^63-1 8 byte
int -2 147 483 648 till 2 147 483 647 -2^31 till 2^31-1 4 byte
smallint -32 768 till 32 767 -2^15 till 2^15-1 2 byte
tinyint 0 till 255 2^0-1 till 2^8-1 1 byte

Remarks

Int-datatypen är den primära heltalsdatatypen i SQL Server. Bigint-datatypen är avsedd att användas när heltalsvärden kan överskrida det intervall som stöds av int-datatypen.

bigint passar mellan smallmoney och int i datatypens prioritetsdiagram.

Funktioner returnerar endast bigint om parameteruttrycket är en stordatatyp . SQL Server höjer inte automatiskt upp andra heltalsdatatyper (tinyint, smallint och int) till bigint.

Konvertering och parameterisering

När du använder operatorerna +, -, *, /eller % aritmetiska operatorer för att utföra implicit eller explicit konvertering av int-, smallint-, tinyint- eller bigint-konstantvärdena till datatyperna float, real, decimal eller numeriska , skiljer sig reglerna som SQL Server tillämpar när den beräknar datatypen och precisionen för uttrycksresultatet varierar beroende på om frågan är autoparameteriserad eller inte.

Därför kan liknande uttryck i frågor ibland ge olika resultat. När en fråga inte är autoparameteriserad konverteras konstantvärdet först till decimal, vars precision är tillräckligt stor för att hålla konstantens värde innan det konverteras till den angivna datatypen. Till exempel konverteras konstantvärdet 1 till decimal(1,0), och konstantvärdet 250 konverteras till decimal (3,0).

När en fråga är autoparameteriserad konverteras konstantvärdet alltid till decimal (10,0) innan det konverteras till den slutliga datatypen. När /-operatorn är inblandad kan inte bara resultattypens precision skilja sig åt mellan liknande frågor, utan även resultatvärdet kan skilja sig åt. Till exempel skiljer sig resultatvärdet för en autoparameteriserad fråga som innehåller uttrycket SELECT CAST (1.0 / 7 AS float), från resultatvärdet för samma fråga som inte är autoparameteriserad, eftersom resultatet av den autoparameteriserade frågan trunkeras för att passa in i datatypen decimal(10,0).

Den lilla datatypen stöds inte i Microsoft Fabric.

Konvertera heltalsdata

När heltal implicit konverteras till en teckendatatyp, om heltalet är för stort för att passa in i teckenfältet, använder SQL Server ASCII-tecknet 42, asterisken (*).

Heltalskonstanter större än 2 147 483 647 konverteras till decimaldatatypen , inte till stordatatypen . Följande exempel visar att när tröskelvärdet överskrids ändras datatypen för resultatet från en int till en decimal.

SELECT 2147483647 / 2 AS Result1,
       2147483649 / 2 AS Result2;

Här är resultatet.

Result1      Result2
-----------  ------------------
1073741823   1073741824.500000

Examples

I följande exempel skapas en tabell med datatyperna bigint, int, smallint och tinyint . Värden infogas i varje kolumn och returneras i -instruktionen 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;

Här är resultatet.

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