sql_variant (Transact-SQL)
Type de données qui stocke les valeurs de divers types de données pris en charge par SQL Server.
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.