Articles

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

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

Applies to: igenSQL Server (minden támogatott verzió) IgenAzure SQL Database IgenAzure SQL felügyelt példány igenAzure Synapse Analytics igenpárhuzamos adattárház

pontos szám adattípusok, amelyek egész adatokat használnak. Az adatbázis helytakarékosságához használja a legkisebb adattípust, amely megbízhatóan tartalmazza az összes lehetséges értéket. Például tinyint elegendő lenne egy személy életkorához, mert senki sem él 255 évesnél idősebb. A tinyint azonban nem lenne elegendő egy épület korához, mert egy épület több mint 255 éves lehet.

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

Megjegyzések

Az int adattípus az SQL Server elsődleges egész adattípusa. A bigint adattípus akkor használható, ha az egész értékek meghaladhatják az int adattípus által támogatott tartományt.

a bigint illeszkedik a smallmoney és az int közé az adattípus rangsorában.

funkciók vissza bigint csak akkor, ha a paraméter kifejezés egy bigint adattípus. Az SQL Server nem támogatja automatikusan más egész adattípusokat (tinyint, smallint, and int) bigint-re.

Vigyázat

amikor a+, -,*,/, vagy % aritmetikai operátorokat használja az int, smallint, tinyint vagy bigint konstans értékek implicit vagy explicit átalakítására az úszó, valós, decimális vagy numerikus adattípusokra, az SQL Server által alkalmazott szabályok, amikor kiszámítja a kifejezés adattípusát és pontosságát eredmények különböznek attól függően, hogy a lekérdezés autoparameterizált-e vagy sem.

ezért a lekérdezések hasonló kifejezései néha különböző eredményeket hozhatnak. Ha egy lekérdezést nem autoparamétereznek, akkor az állandó értéket először numerikus értékre konvertálják, amelynek pontossága elég nagy ahhoz, hogy az állandó értékét megtartsa, mielőtt a megadott adattípusra konvertálna. Például az 1 állandó értéket numerikus (1, 0) értékre konvertálják, a 250 állandó értéket pedig numerikus (3, 0) értékre konvertálják.

Ha egy lekérdezést autoparamétereznek, az állandó értéket mindig numerikus (10, 0) értékre konvertálják, mielőtt a végleges adattípusba konvertálnák. Amikor a / operátor részt vesz, nem csak az eredménytípus pontossága különbözhet a hasonló lekérdezések között, de az eredmény értéke is eltérhet. Például egy autoparameterizált lekérdezés eredményértéke, amely magában foglalja a SELECT CAST (1.0 / 7 AS float) kifejezést, különbözik ugyanazon lekérdezés eredményértékétől, amely nem autoparameterizált, mivel az autoparameterizált lekérdezés eredményei csonkolódnak, hogy illeszkedjenek a numerikus (10, 0) adattípushoz.

egész adatok konvertálása

amikor az egészeket implicit módon karakter adattípusra konvertálják, ha az egész szám túl nagy ahhoz, hogy beleférjen a karaktermezőbe, az SQL Server belép az ASCII 42 karakterbe, a csillagba (*).

A 2,147,483,647-nél nagyobb egész konstansokat tizedes adattípusra konvertálják, nem pedig a bigint adattípusra. A következő példa azt mutatja, hogy a küszöbérték túllépésekor az eredmény adattípusa int-ről decimálisra változik.

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

itt az eredményhalmaz.

Result1 Result2 1073741823 1073741824.500000 

példák

a következő példa létrehoz egy táblázatot a bigint, int, smallint és tinyint adattípusok használatával. Az értékeket minden oszlopba beillesztjük, majd visszaadjuk a SELECT utasításba.

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; 

itt az eredményhalmaz.

Lásd még:

ALTER TABLE (Transact-SQL)
CAST and CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DEKLARATE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.típusok (Transact-SQL)