sql_variant (Transact-SQL)
Ein Datentyp, der Werte verschiedener von SQL Server unterstützter Datentypen speichert.
Syntax
sql_variant
Hinweise
sql_variant kann in Spalten, Parametern, Variablen und Rückgabewerten von benutzerdefinierten Funktionen verwendet werden. sql_variant lässt zu, dass diese Datenbankobjekte Werte anderer Datentypen unterstützen.
Eine Spalte vom Datentyp sql_variant enthält möglicherweise Zeilen verschiedener Datentypen. So kann beispielsweise eine als sql_variant definierte Spalte die Werte int, binary und char speichern. In der folgenden Tabelle werden die Typen von Werten aufgelistet, die nicht mithilfe von sql_variant gespeichert werden können:
varchar(max) |
varbinary(max) |
nvarchar(max) |
xml |
text |
ntext |
image |
rowversion (timestamp) |
sql_variant |
geography |
hierarchyid |
geometry |
Benutzerdefinierte Typen |
datetimeoffset |
sql_variant kann eine maximale Länge von 8016 Byte besitzen. Dies schließt sowohl die Basistypinformationen als auch den Basistypwert ein. Die maximale Länge des Basistypwerts ist 8.000 Byte.
Ein sql_variant-Datentyp muss zuerst in den Wert seines Basisdatentyps umgewandelt werden, bevor er in Operationen, beispielsweise Addition oder Subtraktion, verwendet werden kann.
sql_variant kann ein Standardwert zugewiesen werden. Dieser Datentyp kann auch NULL als zugrunde liegenden Wert haben, den NULL-Werten ist jedoch kein Basistyp zugeordnet. Darüber hinaus kann sql_variant keinen anderen sql_variant-Datentyp als Basistyp haben.
Eindeutige Schlüssel, Primär- oder Fremdschlüssel können Spalten vom Datentyp sql_variant enthalten. Die Gesamtlänge der Datenwerte, aus denen ein Schlüssel für eine vorhandene Zeile besteht, sollte jedoch die maximale Länge eines Indexes nicht überschreiten. Diese beträgt 900 Bytes.
Eine Tabelle kann eine beliebige Anzahl von sql_variant-Spalten haben.
sql_variant kann nicht in CONTAINSTABLE und FREETEXTTABLE verwendet werden.
ODBC unterstützt sql_variant nicht vollständig. Deshalb werden Abfragen von sql_variant-Spalten bei Verwendung von Microsoft OLE DB-Anbieter für ODBC (MSDASQL) als Binärdaten zurückgegeben. Eine sql_variant-Spalte mit den Zeichenfolgendaten 'PS2091' wird als 0x505332303931 zurückgegeben.
Vergleichen von sql_variant-Werten
Der sql_variant-Datentyp steht im oberen Bereich in der Hierarchieliste der Datentypen für die Konvertierung. Für sql_variant-Vergleiche wird die Reihenfolge der Datentyphierarchie von SQL Server in Datentypfamilien unterteilt.
Datentyphierarchie |
Datentypfamilie |
---|---|
sql_variant |
sql_variant |
datetime2 |
Datum und Zeit |
datetimeoffset |
Datum und Zeit |
datetime |
Datum und Zeit |
smalldatetime |
Datum und Zeit |
date |
Datum und Zeit |
time |
Datum und Zeit |
float |
Ungefährer numerischer Wert |
real |
Ungefährer numerischer Wert |
decimal |
Genauer numerischer Wert |
money |
Genauer numerischer Wert |
smallmoney |
Genauer numerischer Wert |
bigint |
Genauer numerischer Wert |
int |
Genauer numerischer Wert |
smallint |
Genauer numerischer Wert |
tinyint |
Genauer numerischer Wert |
bit |
Genauer numerischer Wert |
nvarchar |
Unicode |
nchar |
Unicode |
varchar |
Unicode |
char |
Unicode |
varbinary |
Binär |
binary |
Binär |
uniqueidentifier |
Uniqueidentifier |
Für sql_variant-Vergleiche gelten die folgenden Regeln:
Wenn sql_variant-Werte unterschiedlicher Basisdatentypen verglichen werden und die Basisdatentypen verschiedenen Datentypfamilien angehören, wird der Wert als der höhere eingestuft, dessen Datentypfamilie sich weiter oben in der Hierarchieliste befindet.
Wenn sql_variant-Werte unterschiedlicher Basisdatentypen verglichen werden und die Basisdatentypen derselben Datentypfamilie angehören, wird der Wert, dessen Basisdatentyp sich weiter unten in der Hierarchieliste befindet, implizit in den anderen Datentyp konvertiert, und dann wird der Vergleich durchgeführt.
Wenn sql_variant-Werte der Datentypen char, varchar, nchar oder nvarchar verglichen werden, stützt sich der Vergleich zunächst auf folgende Kriterien: LCID, LCID-Version, Vergleichsflags und Sortier-ID. Diese Kriterien werden als ganzzahlige Werte und in der genannten Reihenfolge verglichen. Sind alle diese Kriterien gleich, werden die tatsächlichen Zeichenfolgenwerte entsprechend der Sortierreihenfolge verglichen.