int, bigint, smallint und tinyint (Transact-SQL)
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Endpunkt in Microsoft Fabric
Warehouse in Microsoft Fabric
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. tinyint wäre z.B. ausreichend für das Alter einer Person, da niemand älter als 255 Jahre wird. tinyint wäre allerdings für das Alter eines Gebäudes nicht ausreichend, da ein Gebäude länger als 255 Jahren stehen bleiben 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 Byte |
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 stuft andere Integerdatentypen (tinyint, smallint und int) nicht automatisch auf bigint herauf.
Achtung
Wenn Sie die arithmetischen Operatoren +, -, *, / oder % verwenden, um eine implizite oder explizite Konvertierung der konstanten Werte int, smallint, tinyint oder bigint in die Datentypen float, real, decimal oder numeric auszuführen, wendet SQL Server beim Berechnen des Datentyps und der Genauigkeit der Ausdrucksergebnisse unterschiedliche Regeln an, je nachdem, ob die Abfrage automatisch parametrisiert wurde oder nicht.
Aus diesem Grund können ähnliche Ausdrücke in Abfragen unterschiedliche Ergebnisse erzeugen. Wenn eine Abfrage nicht automatisch parametrisiert wird, wird der konstante Wert vor dem Konvertieren in den angegebenen Datentyp zunächst in den numeric-Datentyp konvertiert, dessen Genauigkeit für den Wert der Konstanten genau ausreicht. Der konstante Wert 1 wird beispielsweise in numeric (1, 0) und der konstante Wert 250 in numeric (3, 0) konvertiert.
Wenn eine Abfrage automatisch parametrisiert wird, wird der konstante Wert vor dem Konvertieren in den endgültigen Datentyp immer in numeric (10, 0) konvertiert. Wenn der Operator / verwendet wird, kann bei ähnlichen Abfragen nicht nur die Genauigkeit des Ergebnistyps variieren, sondern auch der Ergebniswert. Der Ergebniswert einer automatisch parametrisierten Abfrage, die den Ausdruck SELECT CAST (1.0 / 7 AS float)
einschließt, weicht beispielsweise vom Ergebniswert derselben Abfrage ab (die nicht automatisch parametrisiert wurde), da die Ergebnisse der automatisch parametrisierten Abfrage abgeschnitten werden, d.h., sie werden an die Länge des numeric (10, 0) -Datentyps angepasst.
Der Datentyp tinyint wird in Microsoft Fabric nicht unterstützt.
Konvertieren von Integerdaten
Wenn ganze Zahlen implizit in einen Zeichendatentyp konvertiert werden und die ganze Zahl für das Zeichenfeld zu groß ist, fügt SQL Server das ASCII-Zeichen 42 (Sternchen (*)) ein.
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
(1 row(s) affected)
Weitere Informationen
ALTER TABLE (Transact-SQL)
CAST und CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.types (Transact-SQL)