Articles

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

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

Applies to: yesSQL Server (kaikki tuetut versiot) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics Kyllärinnakkainen tietovarasto

eksaktien lukujen tietotyypit, jotka käyttävät Kokonaislukutietoa. Jos haluat säästää tilaa tietokannassa, käytä pienintä tietotyyppiä, joka voi luotettavasti sisältää kaikki mahdolliset arvot. Esimerkiksi tinyint riittäisi ihmisen ikään, koska kukaan ei elä yli 255-vuotiaaksi. Tinyint ei kuitenkaan riittäisi rakennuksen ikään, koska rakennus voi olla yli 255 vuotta vanha.

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

huomautukset

int-tietotyyppi on SQL Serverin ensisijainen kokonaisluku-tietotyyppi. Bigint – tietotyyppi on tarkoitettu käytettäväksi silloin, kun kokonaislukuarvot saattavat ylittää int-tietotyypin tukeman alueen.

bigint sijoittuu tietotyypin precedence-kaaviossa smallmoneyn ja int: n väliin.

funktiot palauttavat bigintin vain, jos parametrilauseke on bigint-tietotyyppi. SQL Server Ei automaattisesti edistä muita kokonaisluku tietotyyppejä (tinyint, smallint ja int) bigint.

Varoitus

kun käytät+ -, -,* -, / – tai % – aritmeettisia operaattoreita int -, smallint -, tinyint-tai bigint-vakioiden implisiittiseen tai eksplisiittiseen muuntamiseen float -, reaali -, desimaali-tai numeerisiin tietotyyppeihin, säännöt, joita SQL Server soveltaa laskiessaan lausekkeen tulosten tietotyyppiä ja tarkkuutta vaihtelevat riippuen siitä, onko kysely autoparametroitu vai ei.

siksi samankaltaiset ilmaisut kyselyissä voivat joskus tuottaa erilaisia tuloksia. Kun kyselyä ei ole autoparametroitu, vakioarvo muunnetaan ensin numeeriseksi, jonka tarkkuus on juuri tarpeeksi suuri pitämään vakion arvon, ennen kuin muunnetaan määritettyyn tietotyyppiin. Esimerkiksi vakioarvo 1 muunnetaan numeeriseksi (1, 0) ja vakioarvo 250 muunnetaan numeeriseksi (3, 0).

kun kysely on autoparameteroitu, vakioarvo muunnetaan aina numeeriseksi (10, 0) ennen muuntamista lopulliseen tietotyyppiin. Kun / operaattori on mukana, ei ainoastaan tuloksen tyypin tarkkuus voi vaihdella samankaltaisten kyselyjen välillä, vaan myös tuloksen arvo voi vaihdella. Esimerkiksi autoparametrisoidun kyselyn tulosarvo, joka sisältää lausekkeen SELECT CAST (1.0 / 7 AS float), eroaa saman kyselyn tulosarvosta, joka ei ole autoparametrisoitu, koska autoparametrisoidun kyselyn tulokset on typistetty sopimaan numeeriseen (10, 0) tietotyyppiin.

muunnetaan kokonaislukutiedot

kun kokonaisluvut muunnetaan implisiittisesti merkistötietotyypiksi, jos kokonaisluku on liian suuri mahtuakseen merkistökenttään, SQL Server syöttää ASCII-merkin 42, asteriskin (*).

yli 2,147,483,647 olevat Kokonaisvakiot muunnetaan desimaalitietotyypiksi, ei bigint-tietotyypiksi. Seuraava esimerkki osoittaa, että kun raja-arvo ylittyy, tuloksen tietotyyppi muuttuu int: stä desimaaliksi.

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

tässä on tulosjoukko.

Result1 Result2 1073741823 1073741824.500000 

esimerkit

seuraava esimerkki luo taulukon käyttäen bigint -, int -, smallint-ja tinyint-tietotyyppejä. Arvot lisätään jokaiseen sarakkeeseen ja palautetaan 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; 

tässä on tulosjoukko.

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

Katso myös

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