Articles

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

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

Applies to: takSQL Server (Wszystkie obsługiwane wersje) takAzure SQL Database takAzure SQL Managed Instance takAzure Synapse Analytics takhurtownia danych równoległych

typy danych exact-number, które wykorzystują dane całkowite. Aby zaoszczędzić miejsce w bazie danych, użyj najmniejszego typu danych, który może niezawodnie zawierać wszystkie możliwe wartości. Na przykład, tinyint byłoby wystarczające dla wieku osoby, ponieważ nikt nie żyje, aby być więcej niż 255 lat. Ale tinyint nie wystarcza do wieku budynku, ponieważ budynek może mieć więcej niż 255 lat.

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

uwagi

typ danych int jest podstawowym typem danych integer w SQL serwerze. Typ danych bigint jest przeznaczony do stosowania, gdy wartości integer mogą przekraczać zakres obsługiwany przez typ danych int.

bigint pasuje pomiędzy smallmoney i int w wykresie pierwszeństwa typu danych.

funkcje zwracają bigint tylko jeżeli wyrażenie parametru jest typem danych bigint. SQL Server nie promuje automatycznie innych typów danych całkowitych (tinyint, smallint i int) do bigint.

Uwaga

Kiedy używasz operatorów arytmetycznych+, -,*, / lub % do niejawnej lub jawnej konwersji wartości stałych int, smallint, tinyint lub bigint na typy danych float, real, decimal lub numeric, reguły stosowane przez SQL Server podczas obliczania typu danych i precyzji wyników wyrażeń różnią się w zależności od tego, czy zapytanie jest autoparametryzowane, czy nie.

dlatego podobne wyrażenia w zapytaniach mogą czasami dawać różne wyniki. Gdy zapytanie nie jest autoparametryzowane, wartość stała jest najpierw konwertowana na numeryczną, której dokładność jest wystarczająco duża, aby utrzymać wartość stałej, przed konwersją do określonego typu danych. Na przykład wartość stała 1 jest zamieniana na liczbową (1, 0), a wartość stała 250 jest zamieniana na liczbową (3, 0).

gdy zapytanie jest autoparametryzowane, stała jest zawsze konwertowana na numeryczną (10, 0) przed konwersją na ostateczny typ danych. Gdy operator / jest zaangażowany, nie tylko precyzja typu wyniku może się różnić między podobnymi zapytaniami, ale także wartość wyniku. Na przykład wartość wynikowa zapytania autoparametryzowanego, która zawiera wyrażenie SELECT CAST (1.0 / 7 AS float), różni się od wartości wynikowej tego samego zapytania, które nie jest autoparametryzowane, ponieważ wyniki zapytania autoparametryzowanego są obcięte tak, aby pasowały do typu danych numeric (10, 0).

Konwersja danych całkowitych

gdy liczby całkowite są domyślnie konwertowane na typ danych znakowych, jeśli liczba całkowita jest zbyt duża, aby zmieścić się w polu znaków, SQL Server wprowadza znak ASCII 42, gwiazdkę (*).

stałe całkowite większe niż 2,147,483,647 są konwertowane do typu danych dziesiętnych, a nie typu danych bigint. Poniższy przykład pokazuje, że po przekroczeniu wartości progowej typ danych wyniku zmienia się z wartości int na wartość dziesiętną.

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

oto zestaw wyników.

Result1 Result2 1073741823 1073741824.500000 

przykłady

poniższy przykład tworzy tabelę przy użyciu typów danych bigint, int, smallint i tinyint. Wartości są wstawiane do każdej kolumny i zwracane w instrukcji 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; 

oto wynik.

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

Zobacz także

ALTER TABLE (Transact-SQL)
CAST and CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.typy (Transact-SQL)