Articles

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

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

Applies to: jaSQL Server (alle unterstützten Versionen) JaAzure SQL-Datenbank JaVerwaltete Azure SQL-Instanz jaAzure Synapse Analytics jaParalleles Data Warehouse

Datentypen mit exakter Zahl, die ganzzahlige Daten verwenden. Um Speicherplatz in der Datenbank zu sparen, verwenden Sie den kleinsten Datentyp, der zuverlässig alle möglichen Werte enthalten kann. Zum Beispiel würde tinyint für das Alter einer Person ausreichen, da niemand älter als 255 Jahre ist. Tinyint würde jedoch für das Alter eines Gebäudes nicht ausreichen, da ein Gebäude mehr als 255 Jahre alt sein kann.

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

Anmerkungen

Der Datentyp int ist der primäre ganzzahlige Datentyp in SQL Server. Der Datentyp bigint ist für die Verwendung vorgesehen, wenn ganzzahlige Werte den vom Datentyp int unterstützten Bereich überschreiten können.

bigint passt im Datentyp-Prioritätsdiagramm zwischen smallmoney und int.

Funktionen geben bigint nur zurück, wenn der Parameterausdruck ein bigint-Datentyp ist. SQL Server befördert andere Integer-Datentypen (tinyint, smallint und int) nicht automatisch zu bigint.

Vorsicht

Wenn Sie die arithmetischen Operatoren +, -, *, / oder % verwenden, um implizite oder explizite Konvertierung von Konstanten int, smallint, tinyint oder bigint in die Datentypen float, real, decimal oder numeric durchzuführen, unterscheiden sich die Regeln, die SQL Server beim Berechnen des Datentyps und der Genauigkeit der Ausdrucksergebnisse anwendet, je nachdem, ob die Abfrage automatisch parametrisiert ist oder nicht.Daher können ähnliche Ausdrücke in Abfragen manchmal zu unterschiedlichen Ergebnissen führen. Wenn eine Abfrage nicht automatisch parametriert wird, wird der konstante Wert zuerst in numeric konvertiert, dessen Genauigkeit gerade groß genug ist, um den Wert der Konstanten zu speichern, bevor er in den angegebenen Datentyp konvertiert wird. Beispielsweise wird der konstante Wert 1 in numerisch (1, 0) und der konstante Wert 250 in numerisch (3, 0) konvertiert.

Wenn eine Abfrage automatisch parametriert wird, wird der konstante Wert immer in numeric (10, 0) konvertiert, bevor er in den endgültigen Datentyp konvertiert wird. Wenn der Operator / beteiligt ist, kann sich nicht nur die Genauigkeit des Ergebnistyps bei ähnlichen Abfragen unterscheiden, sondern auch der Ergebniswert. Beispielsweise unterscheidet sich der Ergebniswert einer autoparametrisierten Abfrage, die den Ausdruck SELECT CAST (1.0 / 7 AS float) enthält, vom Ergebniswert derselben Abfrage, die nicht autoparametrisiert ist, da die Ergebnisse der autoparametrisierten Abfrage abgeschnitten werden, um in den Datentyp numeric (10, 0) zu passen.

Ganzzahlige Daten konvertieren

Wenn Ganzzahlen implizit in einen Zeichendatentyp konvertiert werden und die Ganzzahl zu groß ist, um in das Zeichenfeld zu passen, gibt SQL Server das ASCII-Zeichen 42, das Sternchen (*), ein.

Integer-Konstanten größer als 2.147.483.647 werden in den Datentyp decimal konvertiert, nicht in den Datentyp bigint. Das folgende Beispiel zeigt, dass bei Überschreiten des Schwellenwerts der Datentyp des Ergebnisses von int in decimal geändert wird.

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

Hier ist die Ergebnismenge.

Result1 Result2 1073741823 1073741824.500000 

Beispiele

Das folgende Beispiel erstellt eine Tabelle mit den Datentypen bigint, int, smallint und tinyint. Werte werden in jede Spalte eingefügt und in der SELECT-Anweisung zurückgegeben.

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; 

Hier ist die Ergebnismenge.

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

Siehe auch

ALTER TABLE (Transact-SQL)
CAST und KONVERTIEREN (Transact-SQL)
TABELLE ERSTELLEN (Transact-SQL)
DEKLARIEREN @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.typen (Transact-SQL)