Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Dokładne typy danych liczb, które używają danych całkowitych. 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 małej tabeli odnośników z wartościami stanu, ponieważ może przechowywać aż 256 wierszy. Ale tinyint nie jest wystarczająca dla listy pracowników, ponieważ twoja firma może mieć setki lub tysiące pracowników.
| Typ danych | Range | Wyrażenie zakresu | Magazyn |
|---|---|---|---|
| bigint | -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 | -2^63 do 2^63-1 | 8 bajtów |
| int | -2,147,483,648 do 2,147,483,647 | -2^31 do 2^31-1 | 4 bajty |
| smallint | -32,768 do 32,767 | -2^15 do 2^15-1 | 2 bajty |
| tinyint | Od 0 do 255 | Od 2^0 do 2^8-1 | 1 bajt |
Remarks
Typ danych int jest podstawowym typem danych całkowitych w programie SQL Server. Typ danych bigint jest przeznaczony do użycia, gdy wartości całkowite mogą przekraczać zakres obsługiwany przez typ danych int .
bigint pasuje między małą iintą na wykresie pierwszeństwa typu danych.
Funkcje zwracają bigint tylko wtedy, gdy wyrażenie parametru jest typem danych bigint . Program SQL Server nie promuje automatycznie innych typów danych całkowitych (tinyint, smallint i int) na bigint.
Konwersja i parametryzacja
W przypadku używania +operatorów arytmetycznych , -*/%, lub arytmetycznych do wykonywania niejawnej lub jawnej konwersji int, smallint, tinyint lub bigint wartości stałych na typy danych zmiennoprzecinkowych, rzeczywistych, dziesiętnych lub liczbowych, reguły stosowane przez program SQL Server podczas obliczania typu danych i precyzji wyników wyrażenia różnią się w zależności od tego, czy zapytanie jest autoparametryczne, czy nie.
W związku z tym podobne wyrażenia w zapytaniach mogą czasami generować różne wyniki. Gdy zapytanie nie jest autoparametryczne, stała wartość jest najpierw konwertowana na liczbę dziesiętną, której precyzja jest wystarczająco duża, aby przechowywać wartość stałej przed przekonwertowaniem na określony typ danych. Na przykład wartość 1 stała jest konwertowana na wartość dziesiętną (1,0), a stała jest 250 konwertowana na wartość dziesiętną(3,0).
Gdy zapytanie jest autoparametryczne, wartość stała jest zawsze konwertowana na wartość dziesiętną (10 0) przed przekonwertowaniem na ostateczny typ danych. Jeśli operator /jest zaangażowany, nie tylko precyzja typu wyniku różni się między podobnymi zapytaniami, ale również wartość wyniku może się różnić. Na przykład wartość wyniku autoparametryzowanego zapytania, która zawiera wyrażenie SELECT CAST (1.0 / 7 AS float), różni się od wartości wyniku tego samego zapytania, które nie jest autoparametryczne, ponieważ wyniki zapytania autoparametrizowanego są obcinane tak, aby mieściły się w typie danych dziesiętnych (10 0).
Typ danych tinyint nie jest obsługiwany w usłudze Microsoft Fabric.
Konwertowanie danych całkowitych
Jeśli liczby całkowite są niejawnie konwertowane na typ danych znaków, jeśli liczba całkowita jest zbyt duża, aby zmieścić się w polu znaku, program SQL Server używa znaku ASCII 42, gwiazdki (*).
Stałe całkowite większe niż 2147 483 647 są konwertowane na typ danych dziesiętnych , a nie typ danych bigint . W poniższym przykładzie pokazano, że po przekroczeniu wartości progowej typ danych wyniku zmienia się z int na dziesiętny.
SELECT 2147483647 / 2 AS Result1,
2147483649 / 2 AS Result2;
Oto zestaw wyników.
Result1 Result2
----------- ------------------
1073741823 1073741824.500000
Examples
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 zestaw wyników.
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807 2147483647 32767 255