int, bigint, smallint und tinyint (Transact-SQL)
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL verwaltete Instanz
Azure Synapse Analytics
Platform System (PDW)
SQL Analytics Platform-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric Warehouse
Exakte Zahlendatentypen für ganzzahlige Daten. Wenn Sie Speicherplatz in der Datenbank sparen möchten, verwenden Sie den kleinsten Datentyp, der auf jeden Fall alle möglichen Werte enthalten kann. Beispielsweise wäre tinyint für das Alter einer Person ausreichend, weil niemand mehr als 255 Jahre alt sein muss. Aber tinyint reicht nicht für das Alter eines Gebäudes aus, da ein Gebäude mehr als 255 Jahre alt sein kann.
Datentyp | Range | Bereichsausdruck | Storage |
---|---|---|---|
bigint | -9,223,372,036,854,775,808 bis 9,223,372,036,854,775,807 | −2^63 bis 2^63−1 | 8 Byte |
int | -2,147,483,648 bis 2,147,483,647 | −2^31 bis 2^31−1 | 4 Byte |
smallint | –32.768 bis 32.767 | −2^15 bis 2^15−1 | 2 Bytes |
tinyint | 0 bis 255 | 2^0−1 bis 2^8−1 | 1 Byte |
Bemerkungen
Der int-Datentyp ist der primäre Integerdatentyp in SQL Server. Der bigint-Datentyp ist für Fälle bestimmt, in denen ganzzahlige Werte den durch den int-Datentyp unterstützten Bereich überschreiten.
bigint passt zwischen smallmoney und int in der Rangfolge der Datentypen.
Die Funktionen geben bigint nur dann zurück, wenn der Parameterausdruck vom Datentyp bigint ist. SQL Server fördert nicht automatisch andere ganzzahlige Datentypen (tinyint, smallint und int) in bigint.
Konvertierung und Parametrisierung
Wenn Sie die +
Operatoren ,-
, , *
, /
oder %
arithmetische Operatoren verwenden, um implizite oder explizite Konvertierungen von Int-, Smallint-, Tinyint- oder Bigint-Konstantenwerten in den Gleitkomma-, Real-, Dezimal- oder numerischen Datentypen durchzuführen, unterscheiden sich die Regeln, die SQL Server bei der Berechnung des Datentyps und der Genauigkeit der Ausdrucksergebnisse anwendet, je nachdem, ob die Abfrage automatischparameterisiert ist oder nicht.
Aus diesem Grund können ähnliche Ausdrücke in Abfragen unterschiedliche Ergebnisse erzeugen. Wenn eine Abfrage nicht automatischparameterisiert wird, wird der Konstantenwert zuerst in eine Dezimalzahl konvertiert, deren Genauigkeit nur groß genug ist, um den Wert der Konstante zu halten, bevor sie in den angegebenen Datentyp konvertiert wird. Beispielsweise wird der Konstantenwert 1
in decimal(1,0) konvertiert, und der Konstantenwert 250
wird in dezimal(3,0) konvertiert.
Wenn eine Abfrage automatischparameterisiert wird, wird der Konstantenwert immer in dezimal(10,0) konvertiert, bevor er in den endgültigen Datentyp konvertiert wird. Wenn der Operator / verwendet wird, kann bei ähnlichen Abfragen nicht nur die Genauigkeit des Ergebnistyps variieren, sondern auch der Ergebniswert. Der Ergebniswert einer automatischparameterisierten Abfrage, die den Ausdruck SELECT CAST (1.0 / 7 AS float)
enthält, unterscheidet sich z. B. vom Ergebniswert derselben Abfrage, die nicht automatischparametert ist, da die Ergebnisse der automatischparameterisierten Abfrage abgeschnitten werden, damit sie in den Datentyp dezimal(10,0) passen.
Der tinyint-Datentyp wird in Microsoft Fabric nicht unterstützt.
Konvertieren ganzzahliger Daten
Wenn ganze Zahlen implizit in einen Zeichendatentyp konvertiert werden, wenn die ganze Zahl zu groß ist, um in das Zeichenfeld einzupassen, verwendet SQL Server ASCII-Zeichen 42, das Sternchen (*
).
Integerkonstanten, die größer als 2.147.483.647 sind, werden in den decimal-Datentyp konvertiert und nicht in den bigint-Datentyp. Das folgende Beispiel zeigt, dass bei Überschreitung des Schwellenwerts der Datentyp des Ergebnisses von einem int in einen decimal-Datentyp geändert wird.
SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2;
Hier ist das Resultset.
Result1 Result2
----------- ------------------
1073741823 1073741824.500000
Beispiele
Im folgenden Beispiel wird eine Tabelle mit den Datentypen bigint, int, smallint und tinyint erstellt. 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 das Resultset.
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807 2147483647 32767 255