sql_variant (Transact-SQL)

Type de données qui stocke les valeurs de divers types de données pris en charge par SQL Server.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

sql_variant

Notes

sql_variant peut être utilisé dans les colonnes, paramètres, variables et valeurs de retour des fonctions définies par l'utilisateur. sql_variant permet à ces objets de base de données de prendre en charge les valeurs des autres types de données.

Une colonne de type sql_variant peut contenir des lignes de types de données différents. Par exemple, une colonne définie en tant que sql_variant peut stocker des valeurs int, binary et char. Le tableau suivant répertorie les types de valeurs qui ne peuvent pas être stockées en utilisant sql_variant :

varchar(max)

varbinary(max)

nvarchar(max)

xml

text

ntext

image

rowversion (timestamp)

sql_variant

geography

hierarchyid

geometry

Types définis par l'utilisateur

datetimeoffset

sql_variant peut avoir une longueur maximale de 8 016 octets. Cela inclut les informations du type de base et la valeur du type de base. La longueur maximale de la valeur de type de base réelle est de 8 000 octets.

Un type de données sql_variant doit d'abord être converti à sa valeur de base avant d'être utilisé dans des opérations, notamment l'addition et la soustraction.

Il est possible d'attribuer une valeur par défaut à sql_variant. Ce type de données accepte également les valeurs NULL comme valeurs sous-jacentes, mais ces dernières ne seront pas associées à un type de base. En outre, sql_variant ne peut pas avoir une autre sql_variant comme type de base.

Une clé unique, primaire ou étrangère peut inclure des colonnes de type sql_variant, mais la longueur totale des valeurs de données qui composent la clé d'une ligne spécifique ne doit pas être supérieure à la longueur maximale d'un index. Cette longueur est de 900 octets.

Une table peut inclure n'importe quel nombre de colonnes sql_variant.

sql_variant ne peut pas être utilisé dans les instructions CONTAINSTABLE et FREETEXTTABLE.

ODBC ne prend pas pleinement en charge le type sql_variant. Par conséquent, les requêtes des colonnes sql_variant sont retournées sous la forme de données binaires lorsque vous utilisez Microsoft OLE DB Provider pour ODBC (MSDASQL). Par exemple, une colonne sql_variant contenant les données chaîne de caractères « PS2091 » est retournée sous la forme 0x505332303931.

Comparaison des valeurs sql_variant

Le type de données sql_variant est situé tout en haut de la hiérarchie des types de données pour la conversion. Pour les comparaisons sql_variant, la hiérarchie des types de données SQL Server est ordonnée en familles.

Hiérarchie des types de données

Famille de types de données

sql_variant

sql_variant

datetime2

Date et heure

datetimeoffset

Date et heure

datetime

Date et heure

smalldatetime

Date et heure

date

Date et heure

time

Date et heure

float

Valeur numérique approchée

real

Valeur numérique approchée

decimal

Valeur numérique exacte

money

Valeur numérique exacte

smallmoney

Valeur numérique exacte

bigint

Valeur numérique exacte

int

Valeur numérique exacte

smallint

Valeur numérique exacte

tinyint

Valeur numérique exacte

bit

Valeur numérique exacte

nvarchar

Unicode

nchar

Unicode

varchar

Unicode

char

Unicode

varbinary

Binary

binary

Binary

uniqueidentifier

Uniqueidentifier

Les règles suivantes s'appliquent aux comparaisons sql_variant :

  • Lors de la comparaison des valeurs sql_variant issues de différents types de données de base appartenant à des familles de types de données différentes, la valeur de la famille dont le rang est supérieur dans la hiérarchie est considérée comme la valeur la plus élevée des deux.

  • Lors de la comparaison des valeurs sql_variant issues de différents types de données de base appartenant à la même famille, la valeur du type dont le rang est inférieur dans la hiérarchie est implicitement convertie vers l'autre type de données et la comparaison est alors effectuée.

  • Lorsque les valeurs sql_variant des types de données char, varchar, nchar ou nvarchar sont comparées, leurs classements sont d'abord comparés d'après les critères suivants : LCID, version LCID, indicateurs de comparaison et ID de tri. Chacun de ces critères est comparé en tant que valeur entières, dans l'ordre indiqué. Si tous ces critères sont égaux, les valeurs de chaîne réelles sont comparées d'après le classement.

Conversion de données sql_variant

Lors de la manipulation de types de données sql_variant, SQL Server prend en charge les conversions implicites en type sql_variant d'objets de type de données différent. Cependant, SQL Server ne prend pas en charge les conversions implicites de données sql_variant en un objet possédant un autre type de données.

Voir aussi

Référence

CAST et CONVERT (Transact-SQL)

SQL_VARIANT_PROPERTY (Transact-SQL)