Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer le type de données de base à partir d'une valeur de variante SQL dans SQL Server

Dans SQL Server, vous pouvez utiliser le SQL_VARIANT_PROPERTY() fonction pour renvoyer les informations de type de données de base à partir d'un sql_variant valeur.

La fonction accepte deux arguments :le sql_variant valeur et la propriété pour laquelle les informations doivent être fournies.

Exemple 1 - Utilisation de base

Voici un exemple qui illustre le concept et l'utilisation de base.

DECLARE @var sql_variant = 'Hey!';
SELECT SQL_VARIANT_PROPERTY(@var, 'BaseType') AS BaseType;

Résultat :

+------------+
| BaseType   |
|------------|
| varchar    |
+------------+

Dans ce cas, le type de base est varchar .

Voici ce qui se passe si je change la valeur en un type différent :

DECLARE @var sql_variant = $1.50;
SELECT SQL_VARIANT_PROPERTY(@var, 'BaseType') AS BaseType;

Résultat :

+------------+
| BaseType   |
|------------|
| money      |
+------------+

Cette fois, le type de base est money .

Exemple 2 – Autres propriétés

Au moment d'écrire ces lignes, il existe six arguments possibles pour cette fonction. En d'autres termes, vous pouvez obtenir des informations sur six propriétés différentes de la valeur transmise.

Voici un exemple qui utilise les six :

DECLARE @var sql_variant = SYSDATETIME();
SELECT 
  SQL_VARIANT_PROPERTY(@var, 'BaseType') AS BaseType,
  SQL_VARIANT_PROPERTY(@var, 'Precision') AS Precision,
  SQL_VARIANT_PROPERTY(@var, 'Scale') AS Scale,
  SQL_VARIANT_PROPERTY(@var, 'TotalBytes') AS TotalBytes,
  SQL_VARIANT_PROPERTY(@var, 'Collation') AS Collation,
  SQL_VARIANT_PROPERTY(@var, 'MaxLength') AS MaxLength;

Résultat :

+------------+-------------+---------+--------------+-------------+-------------+
| BaseType   | Precision   | Scale   | TotalBytes   | Collation   | MaxLength   |
|------------+-------------+---------+--------------+-------------+-------------|
| datetime2  | 27          | 7       | 11           | NULL        | 8           |
+------------+-------------+---------+--------------+-------------+-------------+