Articles

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

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

Applies to: anoSQL Server (všechny podporované verze) AnoDatabáze SQL Azure AnoSQL Azure Managed Instance anoAzure Synapse Analytics anoParalelní Datového Skladu

Přesné číslo datové typy, které používají celočíselné údaje. Chcete-li ušetřit místo v databázi, použijte nejmenší datový typ, který může spolehlivě obsahovat všechny možné hodnoty. Například tinyint by stačil na věk člověka, protože nikdo nežije více než 255 let. Na stáří budovy by ale nestačil, protože budova může být starší než 255 let.

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

poznámky

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

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

funkce vrátí bigint pouze v případě, že výraz parametru je datový typ bigint. SQL Server automaticky nepodporuje jiné celočíselné datové typy (tinyint, smallint a int) na bigint.

Upozornění

Při použití +, -, *, /, nebo % aritmetické operátory provádět implicitní nebo explicitní převod int, smallint, tinyint, nebo bigint konstanta hodnoty float, real, decimal nebo numeric typy dat, pravidel, které SQL Server použije, když se to spočítá datový typ a přesnost vyjadřování výsledků se liší v závislosti na tom, zda je dotaz autoparameterized, nebo ne.

proto podobné výrazy v dotazech mohou někdy přinést různé výsledky. Když dotaz není autoparameterized, konstantní hodnota je nejprve převedeny na numerické, jejichž přesnost je dostatečně velká, aby držet hodnotu konstantní, před převodem do zadaného datového typu. Například konstantní hodnota 1 je převedena na číselnou (1, 0) a konstantní hodnota 250 je převedena na číselnou (3, 0).

když je dotaz autoparametrizován, konstantní hodnota je vždy převedena na číselné (10, 0) před převodem na konečný datový typ. Pokud se jedná o operátor/, může se přesnost typu výsledku lišit nejen mezi podobnými dotazy, ale může se lišit i hodnota výsledku. Například, výsledek hodnota autoparameterized dotazu, který zahrnuje výraz SELECT CAST (1.0 / 7 AS float), se liší od výsledku hodnotu stejného dotazu, který není autoparameterized, protože výsledky dotazu autoparameterized, jsou zkráceny, aby se vešly do numeric (10, 0) datový typ.

Konverze dat celé číslo

Když jsou celá čísla implicitně převeden na typu dat znak, celé číslo je příliš velké, aby se vešly do pole znak, SQL Server zadá znak ASCII 42, hvězdička (*).

celočíselné konstanty větší než 2 147 483 647 jsou převedeny na desetinný datový typ, nikoli 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 int na desetinné číslo.

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

zde je sada výsledků.

Result1 Result2 1073741823 1073741824.500000 

Příklady

následující příklad vytvoří tabulka pomocí bigint, int, smallint a tinyint datové typy. Hodnoty jsou vloženy do každého sloupce a vráceny v příkazu SELECT.

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; 

zde je sada výsledků.

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

Viz také

ALTER TABULKA (Transact-SQL)
CAST a CONVERT (Transact-SQL)
VYTVOŘIT TABULKY (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SADA @local_variable (Transact-SQL)
sys.typy (Transact-SQL)