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 (alla versioner som stöds) JaAzure SQL Database JaAzure SQL Managed Instance jaAzure Synapse Analytics japarallel data warehouse

exakt antal datatyper som använder Heltalsdata. För att spara utrymme i databasen, använd 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 persons ålder eftersom ingen lever för att vara mer än 255 år gammal. Men tinyint skulle inte räcka för en byggnads ålder eftersom en byggnad kan vara mer än 255 år gammal.

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

anmärkningar

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

bigint passar mellan smallmoney och int i datatypens prioritetsdiagram.

funktioner returnerar bigint endast om parameteruttrycket är en bigint-datatyp. SQL Server marknadsför inte automatiskt andra heltalsdatatyper (tinyint, smallint och int) till bigint.

Varning

När du använder+, -,*, / eller % aritmetiska operatorer för att utföra implicit eller explicit konvertering av int -, smallint -, tinyint-eller bigint-konstanta värden till float -, real -, decimal-eller numeriska datatyper varierar reglerna som SQL Server tillämpar när den beräknar datatypen och precisionen för uttrycksresultaten 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 autoparameteriseras konverteras konstantvärdet först till numeriskt, vars precision är tillräckligt stor för att hålla värdet på konstanten innan du konverterar till den angivna datatypen. Till exempel konverteras konstantvärdet 1 till numeriskt (1, 0) och konstantvärdet 250 konverteras till numeriskt (3, 0).

När en fråga autoparameteriseras konverteras alltid det konstanta värdet till numeriskt (10, 0) innan du konverterar till den slutliga datatypen. När / operatören är involverad kan inte bara resultattypens precision skilja sig mellan liknande frågor, men resultatvärdet kan också skilja sig åt. Resultatvärdet för en autoparameteriserad fråga som innehåller uttrycket SELECT CAST (1.0 / 7 AS float) skiljer sig från resultatvärdet för samma fråga som inte är autoparameteriserad, eftersom resultaten av den autoparameteriserade frågan trunkeras för att passa in i den numeriska datatypen (10, 0).

konvertera heltalsdata

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

Heltalskonstanter större än 2,147,483,647 konverteras till decimaldatatypen, inte bigint-datatypen. 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 resultatuppsättningen.

Result1 Result2 1073741823 1073741824.500000 

exempel

följande exempel skapar en tabell med datatyperna bigint, int, smallint och tinyint. Värden infogas i varje kolumn och returneras i SELECT-satsen.

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 resultatuppsättningen.

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

Se även

ALTER TABLE (Transact-SQL)
CAST och konvertera (Transact-SQL)
Skapa tabell (Transact-SQL)
deklarera @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.typer (Transact-SQL)