Articles

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

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

Applies to: Jastandard Server (alle understøttede versioner) Jastandard database Jastandard instance Jastandard Synapse Analytics Japarallel datalager

nøjagtige antal datatyper, der bruger heltalsdata. For at spare plads i databasen skal du bruge den mindste datatype, der pålideligt kan indeholde alle mulige værdier. For eksempel ville tinyint være tilstrækkelig til en persons alder, fordi ingen lever for at være mere end 255 år gammel. Men tinyint ville ikke være tilstrækkeligt for en bygnings alder, fordi en bygning kan være mere end 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

bemærkninger

int-datatypen er den primære heltalsdatatype i serveren. Bigint-datatypen er beregnet til brug, når heltalsværdier kan overstige det interval, der understøttes af int-datatypen.

bigint passer mellem smallmoney og int i datatypen forrang diagram.

funktioner returnerer kun bigint, hvis parameterudtrykket er en bigint-datatype. Ikke automatisk fremme andre heltal datatyper (tinyint, smallint og int) til bigint.

forsigtig

Når du bruger operatorerne+, -,*, / eller % aritmetiske til at udføre implicit eller eksplicit konvertering af int -, smallint -, tinyint-eller bigint-konstante værdier til float -, real -, decimal-eller numeriske datatyper, varierer de regler, som vi anvender, når vi beregner datatypen og præcisionen af ekspressionsresultaterne, afhængigt af om forespørgslen er autoparameteriseret eller ej.

derfor kan lignende udtryk i forespørgsler undertiden give forskellige resultater. Når en forespørgsel ikke autoparameteriseres, konverteres den konstante værdi først til numerisk, hvis præcision er lige stor nok til at holde værdien af konstanten, før den konverteres til den angivne datatype. For eksempel konverteres den konstante værdi 1 til numerisk (1, 0), og den konstante værdi 250 konverteres til numerisk (3, 0).

Når en forespørgsel autoparameteriseres, konverteres den konstante værdi altid til numerisk (10, 0), før den konverteres til den endelige datatype. Når / operatoren er involveret, kan resultattypens præcision ikke kun variere mellem lignende forespørgsler, men resultatværdien kan også variere. For eksempel adskiller resultatværdien af en autoparameteriseret forespørgsel, der inkluderer udtrykket SELECT CAST (1.0 / 7 AS float) sig fra resultatværdien af den samme forespørgsel, der ikke er autoparameteriseret, fordi resultaterne af den autoparameteriserede forespørgsel afkortes for at passe ind i den numeriske (10, 0) datatype.

konvertering af heltalsdata

når heltal implicit konverteres til en tegndatatype, hvis heltal er for stort til at passe ind i tegnfeltet, indtaster vi ASCII-tegn 42, asterisken (*).

Heltalskonstanter større end 2.147.483.647 konverteres til decimaltypen, ikke bigint-datatypen. Følgende eksempel viser, at når tærskelværdien overskrides, ændres datatypen for resultatet fra en int til en decimal.

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

Her er resultatet sæt.

Result1 Result2 1073741823 1073741824.500000 

eksempler

følgende eksempel opretter en tabel ved hjælp af datatyperne bigint, int, smallint og tinyint. Værdier indsættes i hver kolonne og returneres i SELECT-sætningen.

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 resultatet sæt.

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

Se også

ALTERTABEL (Transact-kvm)
CAST og konverter (Transact-kvm)
Opret tabel (Transact-kvm)
DEKLARER @local_variable (Transact-kvm)
Sæt @local_variable (Transact-kvm)
sys.typer (Transact)