Articles

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

  • 09/08/2017
  • 3 minutes to read
    • M
    • j
    • c
    • M
    • i
    • +8

Applies to: JaSQL Server (alle ondersteunde versies) JaAzure SQL Database JaAzure SQL Managed Instance JaAzure Synapse Analytics jaParallel Data Warehouse

exact-nummer gegevenstypen die integer gegevens gebruiken. Om ruimte te besparen in de database, gebruikt u het kleinste gegevenstype dat betrouwbaar alle mogelijke waarden kan bevatten. Bijvoorbeeld, tinyint zou voldoende zijn voor de leeftijd van een persoon, omdat niemand leeft om meer dan 255 jaar oud. Maar tinyint zou niet voldoende zijn voor de leeftijd van een gebouw, omdat een gebouw meer dan 255 jaar oud kan zijn.

Data type Range Storage
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte

opmerkingen

Het int gegevenstype is het primaire integer gegevenstype in SQL Server. Het bigint-gegevenstype is bedoeld voor gebruik wanneer integer-waarden het bereik overschrijden dat door het INT-gegevenstype wordt ondersteund.

bigint past tussen smallmoney en INT in het gegevenstype prioriteitdiagram.

geeft bigint alleen terug als de parameteruitdrukking een bigint-gegevenstype is. SQL Server promoot niet automatisch andere integer datatypes (tinyint, smallint en int) naar bigint.

voorzichtigheid

wanneer u de+, -,*,/, of % rekenkundige operators gebruikt om impliciete of expliciete conversie van constante waarden int, smallint, tinyint of bigint uit te voeren naar de float, reële, decimale of numerieke gegevenstypen, verschillen de regels die SQL Server toepast wanneer het het gegevenstype en de precisie van de expressieresultaten berekent, afhankelijk van of de query al dan niet automatisch is ingesteld.

daarom kunnen soortgelijke uitdrukkingen in queries soms verschillende resultaten opleveren. Wanneer een query niet automatisch wordt weergegeven, wordt de constante waarde eerst geconverteerd naar numeriek, waarvan de nauwkeurigheid net groot genoeg is om de waarde van de constante vast te houden, alvorens naar het opgegeven gegevenstype te converteren. De constante waarde 1 wordt bijvoorbeeld geconverteerd naar numeriek (1, 0) en de constante waarde 250 wordt geconverteerd naar numeriek (3, 0).

wanneer een query automatisch wordt weergegeven, wordt de constante waarde altijd geconverteerd naar numeriek (10, 0) voordat wordt geconverteerd naar het definitieve gegevenstype. Wanneer de / operator betrokken is, kan niet alleen de precisie van het resultaattype verschillen tussen vergelijkbare query ‘ s, maar kan ook de resultaatwaarde verschillen. Bijvoorbeeld, de resultaatwaarde van een autoparameterized query die de uitdrukking SELECT CAST (1.0 / 7 AS float) bevat, verschilt van de resultaatwaarde van dezelfde query die niet autoparameterized is, omdat de resultaten van de autoparameterized query worden afgekapt om te passen in het numerieke (10, 0) gegevenstype.

integer data converteren

wanneer gehele getallen impliciet worden geconverteerd naar een karaktergegevenstype, als het geheel getal te groot is om in het tekenveld te passen, voert SQL Server ASCII character 42 in, het sterretje (*).

Integer constanten groter dan 2.147.483.647 worden geconverteerd naar het decimale gegevenstype, niet naar het bigint gegevenstype. Het volgende voorbeeld laat zien dat wanneer de drempelwaarde wordt overschreden, het gegevenstype van het resultaat verandert van een int naar een decimaal.

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

Hier is het resultaat ingesteld.

Result1 Result2 1073741823 1073741824.500000 

voorbeelden

het volgende voorbeeld maakt een tabel aan met behulp van de gegevenstypen bigint, int, smallint en tinyint. Waarden worden in elke kolom ingevoegd en geretourneerd in het SELECT-statement.

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 resultaat ingesteld.

MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn -------------------- ----------- ---------------- --------------- 9223372036854775807 2147483647 32767 255 (1 row(s) affected) 

zie ook

ALTER TABLE (Transact-SQL)
CAST and CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.typen (Transact-SQL)