sql_variant (Transact-SQL)sql_variant (Transact-SQL)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Ein Datentyp, der Werte verschiedener von SQL ServerSQL Server unterstützter Datentypen speichert.A data type that stores values of various SQL ServerSQL Server-supported data types.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

sql_variant  

RemarksRemarks

sql_variant kann in Spalten, Parametern, Variablen und Rückgabewerten von benutzerdefinierten Funktionen verwendet werden.sql_variant can be used in columns, parameters, variables, and the return values of user-defined functions. sql_variant ermöglicht, dass diese Datenbankobjekte auch Werte mit anderen Datentypen unterstützen.sql_variant enables these database objects to support values of other data types.

Eine Spalte vom Datentyp sql_variant enthält möglicherweise Zeilen verschiedener Datentypen.A column of type sql_variant may contain rows of different data types. Beispielsweise können in einer als sql_variant definierten Spalte die Werte int, binary und char gespeichert sein.For example, a column defined as sql_variant can store int, binary, and char values.

sql_variant kann eine maximale Länge von 8016 Bytes besitzen.sql_variant can have a maximum length of 8016 bytes. Dies schließt sowohl die Basistypinformationen als auch den Basistypwert ein.This includes both the base type information and the base type value. Die maximale Länge des Basistypwerts ist 8.000 Byte.The maximum length of the actual base type value is 8,000 bytes.

Ein sql_variant-Datentyp muss zuerst in den Wert seines Basisdatentyps umgewandelt werden, bevor er in Operationen, beispielsweise Addition oder Subtraktion, verwendet werden kann.A sql_variant data type must first be cast to its base data type value before participating in operations such as addition and subtraction.

sql_variant kann ein Standardwert zugewiesen werden.sql_variant can be assigned a default value. Dieser Datentyp kann auch NULL als zugrunde liegenden Wert haben, den NULL-Werten ist jedoch kein Basistyp zugeordnet.This data type can also have NULL as its underlying value, but the NULL values will not have an associated base type. Außerdem kann sql_variant nicht der Basistyp für einen andren sql_variant-Datentyp sein.Also, sql_variant cannot have another sql_variant as its base type.

Eindeutige Schlüssel sowie 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 Index nicht überschreiten.A unique, primary, or foreign key may include columns of type sql_variant, but the total length of the data values that make up the key of a specific row should not be more than the maximum length of an index. Diese beträgt 900 Bytes.This is 900 bytes.

Eine Tabelle kann über eine beliebige Anzahl von sql_variant-Spalten verfügen.A table can have any number of sql_variant columns.

sql_variant kann nicht in CONTAINSTABLE und FREETEXTTABLE verwendet werden.sql_variant cannot be used in CONTAINSTABLE and FREETEXTTABLE.

ODBC unterstützt sql_variant nicht vollständig.ODBC does not fully support sql_variant. Deshalb werden Abfragen von sql_variant-Spalten bei Verwendung von Microsoft OLE DB-Anbietern für ODBC (MSDASQL) als Binärdaten zurückgegeben.Therefore, queries of sql_variant columns are returned as binary data when you use Microsoft OLE DB Provider for ODBC (MSDASQL). Eine sql_variant-Spalte mit den Zeichenfolgendaten „PS2091“ wird als 0x505332303931 zurückgegeben.For example, a sql_variant column that contains the character string data 'PS2091' is returned as 0x505332303931.

Vergleichen von sql_variant-WertenComparing sql_variant Values

Der sql_variant-Datentyp steht im oberen Bereich in der Hierarchieliste der Datentypen für die Konvertierung.The sql_variant data type belongs to the top of the data type hierarchy list for conversion. Für sql_variant-Vergleiche wird die Reihenfolge der Datentyphierarchie von SQL ServerSQL Server in Datentypfamilien unterteilt.For sql_variant comparisons, the SQL ServerSQL Server data type hierarchy order is grouped into data type families.

DatentyphierarchieData type hierarchy DatentypfamilieData type family
sql_variantsql_variant sql_variantsql_variant
datetime2datetime2 Datum und UhrzeitDate and time
datetimeoffsetdatetimeoffset Datum und UhrzeitDate and time
datetimedatetime Datum und UhrzeitDate and time
smalldatetimesmalldatetime Datum und UhrzeitDate and time
Datumdate Datum und UhrzeitDate and time
Uhrzeittime Datum und UhrzeitDate and time
floatfloat Ungefährer numerischer WertApproximate numeric
realreal Ungefährer numerischer WertApproximate numeric
decimaldecimal Genauer numerischer WertExact numeric
moneymoney Genauer numerischer WertExact numeric
smallmoneysmallmoney Genauer numerischer WertExact numeric
bigintbigint Genauer numerischer WertExact numeric
intint Genauer numerischer WertExact numeric
smallintsmallint Genauer numerischer WertExact numeric
tinyinttinyint Genauer numerischer WertExact numeric
bitbit Genauer numerischer WertExact numeric
nvarcharnvarchar UnicodeUnicode
ncharnchar UnicodeUnicode
varcharvarchar UnicodeUnicode
charchar UnicodeUnicode
varbinaryvarbinary Binär (Binary)Binary
binarybinary Binär (Binary)Binary
uniqueidentifieruniqueidentifier UniqueidentifierUniqueidentifier

Für sql_variant-Vergleiche gelten die folgenden Regeln:The following rules apply to sql_variant comparisons:

  • 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.When sql_variant values of different base data types are compared and the base data types are in different data type families, the value whose data type family is higher in the hierarchy chart is considered the greater of the two values.
  • 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.When sql_variant values of different base data types are compared and the base data types are in the same data type family, the value whose base data type is lower in the hierarchy chart is implicitly converted to the other data type and the comparison is then made.
  • 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.When sql_variant values of the char, varchar, nchar, or nvarchar data types are compared, their collations are first compared based on the following criteria: LCID, LCID version, comparison flags, and sort ID. Diese Kriterien werden als ganzzahlige Werte und in der genannten Reihenfolge verglichen.Each of these criteria are compared as integer values, and in the order listed. Sind alle diese Kriterien gleich, werden die tatsächlichen Zeichenfolgenwerte entsprechend der Sortierreihenfolge verglichen.If all of these criteria are equal, then the actual string values are compared according to the collation.

Konvertieren von sql_variant-DatenConverting sql_variant Data

Bei der Verarbeitung von sql_variant-Datentypen unterstützt SQL ServerSQL Server die impliziten Konvertierungen von Objekten mit anderen Datentypen in den Typ sql_variant.When handling the sql_variant data type, SQL ServerSQL Server supports implicit conversions of objects with other data types to the sql_variant type. SQL ServerSQL Server unterstützt jedoch keine impliziten Konvertierungen von sql_variant-Daten in ein Objekt mit einem anderen Datentyp.However, SQL ServerSQL Server does not support implicit conversions from sql_variant data to an object with another data type.

RestrictionsRestrictions

In der folgenden Tabelle werden die Typen von Werten aufgelistet, die nicht mithilfe von sql_variant gespeichert werden können:The following table lists the types of values that cannot be stored by using sql_variant:

varchar(max)varchar(max) varbinary(max)varbinary(max)
nvarchar(max)nvarchar(max) xmlxml
texttext ntextntext
imageimage rowversion (timestamp)rowversion (timestamp)
sql_variantsql_variant geographygeography
hierarchyidhierarchyid Geometriegeometry
Benutzerdefinierte TypenUser-defined types datetimeoffsetdatetimeoffset

BeispieleExamples

A.A. Verwenden von „sql_variant“ in einer TabelleUsing a sql_variant in a table

Im folgenden Beispiel wird eine Tabelle mit einem sql_variant-Datentyp erstellt.The following example, creates a table with a sql_variant data type. Dann wird im Beispiel SQL_VARIANT_PROPERTY-Informationen über den colA-Wert 46279.1 abgerufen, wobei colB =1689 und tableA über colA vom Typ sql_variant und colB verfügt.Then the example retrieves SQL_VARIANT_PROPERTY information about the colA value 46279.1 where colB =1689, given that tableA has colA that is of type sql_variant and colB.

CREATE   TABLE tableA(colA sql_variant, colB int)  
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)  
SELECT   SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'  
FROM      tableA  
WHERE      colB = 1689  

Im Folgenden finden Sie das Resultset.Here is the result set.Beachten Sie, dass jeder dieser drei Werte vom Datentyp sql_variant ist. Note that each of these three values is a sql_variant.

Base Type    Precision    Scale  
---------    ---------    -----  
decimal      8           2  

(1 row(s) affected)  

B.B. Verwenden von „sql_variant“ als VariableUsing a sql_variant as a variable

Das folgende Beispiel erstellt eine Variable unter Verwendung des sql_variant-Datentyps und ruft dann SQL_VARIANT_PROPERTY-Informationen zu einer Variable mit dem Namen @v1 ab.The following example, creates a variable using the sql_variant data type, and then retrieves SQL_VARIANT_PROPERTY information about a variable named @v1.

DECLARE @v1 sql_variant;  
SET @v1 = 'ABC';  
SELECT @v1;  
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');  
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');  

Siehe auchSee also

CAST und CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)SQL_VARIANT_PROPERTY (Transact-SQL)