Sdílet prostřednictvím


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

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Datové typy s přesným číslem, které používají celočíselná data. Pokud chcete ušetřit místo v databázi, použijte nejmenší datový typ, který dokáže spolehlivě obsahovat všechny možné hodnoty. Například tinyint by stačilo pro malou vyhledávací tabulku se stavovými hodnotami, protože může uložit až 256 řádků. Ale malýint nestačí pro seznam zaměstnanců, protože vaše společnost může mít stovky nebo tisíce zaměstnanců.

Datový typ Range Výraz rozsahu Storage
bigint -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 -2^63 až 2^63-1 8 bajtů
int -2 147 483 648 až 2 147 483 647 -2^31 až 2^31-1 4 bajty
smallint -32 768 až 32 767 -2^15 až 2^15-1 2 bajty
tinyint 0 až 255 2^0-1 až 2^8-1 1 bajt

Remarks

Datový typ int je primární celočíselnou datový typ v SQL Serveru. Datový typ bigint je určen pro použití, pokud celočíselné hodnoty mohou překročit rozsah podporovaný datovým typem int .

bigint zapadá mezi smallmoney a int v grafu priority datového typu.

Funkce vrací bigint pouze v případě, že výraz parametru je datový typ bigint . SQL Server automaticky nezvýší jiné celočíselné datové typy (tinyint, smallint a int) na bigint.

Převod a parametrizace

Pokud použijete +operátory , , -, */nebo % aritmetické operátory k provedení implicitního nebo explicitního převodu int, smallint, tinyint nebo bigint konstantních hodnot na plovoucí, reálné, desetinné nebo číselné datové typy, pravidla, která SQL Server použije při výpočtu datového typu a přesnosti výsledků výrazu, se liší v závislosti na tom, zda je dotaz automatickyparametrizován nebo ne.

Podobné výrazy v dotazech proto můžou někdy vést k různým výsledkům. Pokud dotaz není automatickyparametrován, konstantní hodnota se nejprve převede na desetinné číslo, jehož přesnost je dostatečně velká, aby byla uložena hodnota konstanty před převodem na zadaný datový typ. Například konstantní hodnota 1 se převede na desetinné číslo(1,0) a konstantní hodnota 250 se převede na desítkové(3;0).

Při automatickém parametru dotazu se konstantní hodnota před převodem na konečný datový typ vždy převede na desetinné číslo (10 0 ). Pokud je zapojen operátor / operátor, může se přesnost typu výsledku lišit mezi podobnými dotazy, ale výsledná hodnota se může také lišit. Například výsledná hodnota automatickyparametrizovaného dotazu, který obsahuje výraz SELECT CAST (1.0 / 7 AS float), se liší od výsledné hodnoty stejného dotazu, který není automatickyparametrizován, protože výsledky automatickyparametrizovaného dotazu jsou zkráceny tak, aby se vešly do datového typu decimal(10;0 ).

Microsoft Fabric nepodporuje datový typ tinyint .

Převod celočíselná data

Pokud jsou celá čísla implicitně převedena na datový typ znaku, pokud je celé číslo příliš velké, aby se vešlo do pole znaku, SQL Server používá znak ASCII 42, hvězdičku (*).

Celočíselné konstanty větší než 2 147 483 647 se převedou na datový typ desetinných míst , ne na datový typ bigint . Následující příklad ukazuje, že při překročení prahové hodnoty se datový typ výsledku změní z hodnoty int na desetinnou čárku.

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

Tady je soubor výsledků.

Result1      Result2
-----------  ------------------
1073741823   1073741824.500000

Examples

Následující příklad vytvoří tabulku pomocí datových typů bigint, int, smallint a tinyint . Hodnoty se vloží do každého sloupce a vrátí se SELECT do příkazu.

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;

Tady je soubor výsledků.

MyBigIntColumn       MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807  2147483647  32767            255