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 støttede versjoner)JaAzure SQL DatabaseJaAzure SQL Administrert ForekomstjaAzure Synapse Analyticsjaparallel data warehouse

datatyper med eksakt tall SOM BRUKER Heltallsdata. Hvis du vil spare plass i databasen, bruker du den minste datatypen som kan inneholde alle mulige verdier på en pålitelig måte. For eksempel vil tinyint være tilstrekkelig for en persons alder fordi ingen lever for å være mer enn 255 år gammel. Men tinyint ville ikke være tilstrekkelig for en bygnings alder fordi en bygning kan være mer enn 255 år gammel.

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

Merknader

datatypen int er den primære heltallsdatatypen I SQL Server. Datatypen bigint er beregnet for bruk når heltallsverdier kan overskride området som støttes av datatypen int.

bigint passer mellom smallmoney og int i tabellen datatype prioritet.

Funksjoner returnerer bigint bare hvis parameteruttrykket er en bigint – datatype. SQL Server fremmer ikke automatisk andre heltall datatyper (tinyint, smallint og int) til bigint.

Forsiktig

når du bruker+, -,*, / eller % aritmetiske operatorer til å utføre implisitt eller eksplisitt konvertering av int -, smallint -, tinyint-eller bigint-konstantverdiene til flyt -, real -, desimal-eller numeriske datatyper, varierer reglene SOM SQL Server bruker når den beregner datatypen og presisjonen for uttrykksresultatene, avhengig av om spørringen er autoparameterisert eller ikke.

derfor kan lignende uttrykk i spørringer noen ganger gi forskjellige resultater. Når en spørring ikke autoparameteriseres, konverteres konstantverdien først til numerisk, hvis presisjon er akkurat stor nok til å holde verdien av konstanten, før den konverteres til den angitte datatypen. Konstantverdien 1 konverteres for eksempel til numerisk (1, 0), og konstantverdien 250 konverteres til numerisk (3, 0).

når en spørring autoparameteriseres, konverteres konstantverdien alltid til numerisk (10, 0) før den konverteres til den endelige datatypen. Når / operatøren er involvert, kan ikke bare resultattypens presisjon variere mellom lignende søk, men resultatverdien kan også variere. Resultatverdien for en autoparameterisert spørring som inneholder uttrykket SELECT CAST (1.0 / 7 AS float), er for eksempel forskjellig fra resultatverdien for den samme spørringen som ikke er autoparameterisert, fordi resultatene av den autoparameteriserte spørringen avkortes for å passe inn i datatypen numerisk (10, 0).

Konvertere heltallsdata

når heltall implisitt konverteres til en datatype for tegn, hvis heltallet er for stort til å passe inn i tegnfeltet, GÅR SQL Server INN ASCII-tegn 42, stjernen (*).

Heltallskonstanter større enn 2 147 483 647 konverteres til desimaldatatypen, ikke bigint – datatypen. Følgende eksempel viser at når terskelverdien overskrides, endres datatypen for resultatet fra en int til et desimal.

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

her er resultatsettet.

Result1 Result2 1073741823 1073741824.500000 

Eksempler

følgende eksempel oppretter en tabell ved hjelp av datatypene bigint, int, smallint og tinyint. Verdier settes inn i hver kolonne og returneres I SELECT-setningen.

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; 

her er resultatsettet.

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

Se også

ALTER TABELL (Transact-SQL)
CAST og KONVERTER (Transact-SQL)
OPPRETT TABELL (Transact-SQL)
DEKLARERE @local_variable (Transact-SQL)
SETT @local_variable (Transact-SQL)
sys.typer (Transact-SQL)