Delen via


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

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Gegevenstypen met exacte getallen die gebruikmaken van gehele getallen. Als u ruimte in de database wilt besparen, gebruikt u het kleinste gegevenstype dat op betrouwbare wijze alle mogelijke waarden kan bevatten. Tinyint is bijvoorbeeld voldoende voor een kleine opzoektabel met statuswaarden, omdat deze maximaal 256 rijen kan opslaan. Maar tinyint is niet voldoende voor een lijst met werknemers, omdat uw bedrijf honderden of duizenden werknemers kan hebben.

Gegevenstype Range Bereikexpressie Storage
bigint -9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807 -2^63 tot 2^63-1 8 bytes
int -2.147.483.648 tot 2.147.483.647 -2^31 tot 2^31-1 4 bytes
smallint -32.768 tot 32.767 -2^15 tot 2^15-1 2 bytes
tinyint 0 tot 255 2^0-1 tot 2^8-1 1 byte

Remarks

Het gegevenstype int is het primaire gegevenstype geheel getal in SQL Server. Het gegevenstype bigint is bedoeld voor gebruik wanneer gehele getallen mogelijk groter zijn dan het bereik dat wordt ondersteund door het gegevenstype int .

bigint past tussen smallmoney en int in het gegevenstypeprioriteitsdiagram.

Functies retourneren alleen bigint als de parameterexpressie een bigint-gegevenstype is. SQL Server promoveert niet automatisch andere gehele gegevenstypen (tinyint, smallint en int) naar bigint.

Conversie en parameterisatie

Wanneer u de +operatoren , -,*, /of % rekenkundige operatoren gebruikt om impliciete of expliciete conversie uit te voeren van int-, smallint-, tinyint- of bigint-constantewaarden voor de float-, real-, decimale of numerieke gegevenstypen, zijn de regels die SQL Server toepast wanneer het gegevenstype en de precisie van de expressieresultaten worden berekend, afhankelijk van of de query automatisch wordt geparameteriseerd of niet.

Daarom kunnen vergelijkbare expressies in query's soms verschillende resultaten opleveren. Wanneer een query niet automatisch wordt geparameteriseerd, wordt de constante waarde eerst geconverteerd naar decimaal, waarvan de precisie net groot genoeg is om de waarde van de constante vast te houden, voordat deze wordt geconverteerd naar het opgegeven gegevenstype. De constante waarde 1 wordt bijvoorbeeld geconverteerd naar decimaal(1,0) en de constante waarde 250 wordt geconverteerd naar decimaal(3,0).

Wanneer een query automatisch wordt geparameteriseerd, wordt de constante waarde altijd geconverteerd naar decimaal(10,0) voordat deze wordt geconverteerd naar het uiteindelijke gegevenstype. Wanneer de /-operator betrokken is, kan niet alleen de precisie van het resultaattype verschillen tussen vergelijkbare query's, maar de resultaatwaarde kan ook verschillen. De resultaatwaarde van een automatisch geparameteriseerde query die de expressie SELECT CAST (1.0 / 7 AS float)bevat, verschilt bijvoorbeeld van de resultaatwaarde van dezelfde query die niet automatisch is geparameteriseerd, omdat de resultaten van de automatisch geparameteriseerde query worden afgekapt zodat deze in het gegevenstype decimal(10,0) passen.

Het kleine gegevenstype wordt niet ondersteund in Microsoft Fabric.

Geheel getalgegevens converteren

Wanneer gehele getallen impliciet worden geconverteerd naar een tekengegevenstype, als het gehele getal te groot is om in het tekenveld te passen, gebruikt SQL Server ASCII-teken 42, het sterretje (*).

Gehele getallen groter dan 2.147.483.647 worden geconverteerd naar het decimale gegevenstype, niet het gegevenstype bigint . In het volgende voorbeeld ziet u dat wanneer de drempelwaarde wordt overschreden, het gegevenstype van het resultaat verandert van een int in een decimaal getal.

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

Hier is het resultatenoverzicht.

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

Examples

In het volgende voorbeeld wordt een tabel gemaakt met behulp van de gegevenstypen bigint, int, smallint en tinyint . Waarden worden ingevoegd in elke kolom en geretourneerd in de SELECT instructie.

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;

Hier is het resultatenoverzicht.

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