Articles

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

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

Applies to: daSQL Server (toate versiunile acceptate) DaAzure SQL Database DaAzure SQL gestionat instanță daAzure Synapse Analytics da depozit de date paralel

tipuri de date cu număr exact care utilizează date întregi. Pentru a economisi spațiu în baza de date, utilizați cel mai mic tip de date care poate conține în mod fiabil toate valorile posibile. De exemplu, tinyint ar fi suficient pentru vârsta unei persoane, deoarece nimeni nu trăiește pentru a avea mai mult de 255 de ani. Dar tinyint nu ar fi suficient pentru vârsta unei clădiri, deoarece o clădire poate avea mai mult de 255 de ani.

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

observații

tipul de date int este tipul de date întreg primar în SQL Server. Tipul de date bigint este destinat utilizării atunci când valorile întregi pot depăși intervalul acceptat de tipul de date int.

bigint se potrivește între smallmoney și int în diagrama de prioritate a tipului de date.

funcțiile returnează bigint numai dacă expresia parametrului este un tip de date bigint. SQL Server nu promovează automat alte tipuri de date întregi (tinyint, smallint și int) la bigint.

atenție

când utilizați operatorii aritmetici+, -,*, / sau % pentru a efectua conversia implicită sau explicită a valorilor constante int, smallint, tinyint sau bigint la tipurile de date float, real, zecimal sau numeric, Regulile pe care SQL Server le aplică atunci când calculează tipul de date și precizia rezultatelor expresiei diferă în funcție de faptul dacă interogarea este autoparameterizată sau nu.

prin urmare, expresii similare în interogări pot produce uneori rezultate diferite. Când o interogare nu este autoparameterizată, valoarea constantă este mai întâi convertită în numerică, a cărei precizie este suficient de mare pentru a menține valoarea constantei, înainte de a converti la tipul de date specificat. De exemplu, valoarea constantă 1 este convertită în numerică (1, 0), iar valoarea constantă 250 este convertită în numerică (3, 0).

când o interogare este autoparameterizată, valoarea constantă este întotdeauna convertită în numeric (10, 0) înainte de a converti la tipul de date final. Când operatorul / este implicat, nu numai că precizia tipului de rezultat poate diferi între interogări similare, dar și valoarea rezultatului poate diferi. De exemplu, valoarea rezultatului unei interogări autoparameterizate care include expresia SELECT CAST (1.0 / 7 AS float), diferă de valoarea rezultatului aceleiași interogări care nu este autoparameterizată, deoarece rezultatele interogării autoparameterizate sunt trunchiate pentru a se încadra în tipul de date numeric (10, 0).

conversia datelor întregi

când numerele întregi sunt convertite implicit într-un tip de date de caractere, dacă numărul întreg este prea mare pentru a se încadra în câmpul de caractere, SQL Server introduce caracterul ASCII 42, asteriscul (*).

constante întregi mai mari de 2.147.483.647 sunt convertite în tipul de date zecimal, nu în tipul de date bigint. Următorul exemplu arată că atunci când valoarea pragului este depășită, tipul de date al rezultatului se schimbă de la un int la o zecimală.

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

Iată setul de rezultate.

Result1 Result2 1073741823 1073741824.500000 

Exemple

următorul exemplu creează un tabel folosind tipurile de date bigint, int, smallint și tinyint. Valorile sunt inserate în fiecare coloană și returnate în instrucțiunea 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; 

Iată setul de rezultate.

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

Vezi și

ALTER TABLE (Transact-SQL)
CAST și CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.tipuri (Transact-SQL)