sql_variant (Transact-SQL)

Ein Datentyp, der Werte verschiedener von SQL Server unterstützter Datentypen speichert.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

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

timestamp

sql_variant

geography

hierarchyid

geometry

Benutzerdefinierte Typen

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.