int, bigint, smallint, and tinyint (Transact-SQL)
- 09/08/2017
- 3 minutes to read
-
- M
- j
- c
- M
- i
-
+8
Applies to: SQL Server (kaikki tuetut versiot) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics 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)
Leave a Reply