Freigeben über


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

Exakte Zahlendatentypen für ganzzahlige Daten.

Datentyp

Bereich

Speicherung

bigint

-2^63 (-9,223,372,036,854,775,808) bis 2^63-1 (9,223,372,036,854,775,807)

8 Byte

int

-2^31 (-2.147.483.648) bis 2^31-1 (2.147.483.647)

4 Byte

smallint

-2^15 (-32,768) bis 2^15-1 (32,767)

2 Byte

tinyint

0 bis 255

1 Byte

Hinweise

Der int-Datentyp ist der primäre ganzzahlige Datentyp 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 Ausdruck vom Datentyp bigint ist. SQL Server stuft andere ganzzahlige Datentypen (tinyint, smallint und int) nicht automatisch auf bigint herauf.

VorsichtshinweisVorsicht

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 Werte 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 (die nicht automatisch parametrisiert wurde) ab, da die Ergebnisse der automatisch parametrisierten Abfrage abgeschnitten, d. h. an die Länge des numeric (10, 0)-Datentyps angepasst werden.

Konvertieren von ganzzahligen Daten

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.

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

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

Dies ist das Resultset.

Result1      Result2
1073741823   1073741824.500000

Siehe auch

Verweis

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)