Dans SQL Server, il existe plusieurs façons d'obtenir les métadonnées du jeu de résultats à partir d'une requête. Cela inclut le type de données des colonnes renvoyées par une requête T-SQL.
En particulier, le sys.dm_exec_describe_first_result_set
la fonction de gestion dynamique du système est un bon choix pour une telle tâche.
Exemple
Voici un exemple pour montrer comment utiliser sys.dm_exec_describe_first_result_set
pour obtenir des informations sur le type de données de chaque colonne renvoyée par une requête T-SQL donnée.
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set(
'select * from Clients',
null,
0);
Résultat :
+------------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |------------+------------------+--------------------+--------------+-------------+---------| | ClientCode | clientcode | varchar(8) | 8 | 0 | 0 | | FirstName | NULL | varchar(60) | 60 | 0 | 0 | | LastName | NULL | varchar(60) | 60 | 0 | 0 | +------------+------------------+--------------------+--------------+-------------+---------+
Dans ce cas, trois lignes sont renvoyées, chacune représentant une colonne qui serait renvoyée par la requête que j'analyse.
Vous avez peut-être remarqué que l'une des colonnes utilise un alias de type de données défini par l'utilisateur appelé clientcode . Lorsque vous créez un alias de type de données défini par l'utilisateur, vous le basez sur un type de système existant. Cela se reflète dans le résultat ci-dessus. Nous pouvons voir que clientcode est basé sur varchar(8) .
Le sys.dm_exec_describe_first_result_set
La fonction renvoie beaucoup de colonnes, alors n'hésitez pas à inclure toutes les colonnes pour voir s'il y en a d'autres que vous pourriez trouver utiles. Voir aussi Comment sys.dm_exec_describe_first_result_set
Fonctionne pour une explication plus détaillée et plus d'exemples.
Vous pouvez également utiliser le sp_describe_first_result_set
procédure stockée système pour renvoyer les mêmes informations (elle utilise le même algorithme que sys.dm_exec_describe_first_result_set
).
Ensembles de résultats de procédure stockée
Si vous souhaitez obtenir le type de données des colonnes renvoyées par une procédure stockée, vous pouvez utiliser le sys.dm_exec_describe_first_result_set_for_object
fonction.
Cette fonction utilise le même algorithme que la précédente, mais la différence est que celle-ci accepte l'ID d'une procédure stockée ou d'un déclencheur comme premier argument (au lieu du lot T-SQL réel).
Par conséquent, nous pouvons l'utiliser comme ceci :
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set_for_object(
OBJECT_ID('sp_BadDogs'),
0);
Résultat :
+---------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |---------+------------------+--------------------+--------------+-------------+---------| | DogId | NULL | int | 4 | 10 | 0 | | DogName | NULL | nvarchar(255) | 510 | 0 | 0 | | GoodDog | NULL | bit | 1 | 1 | 0 | +---------+------------------+--------------------+--------------+-------------+---------+
Dans ce cas, j'ai utilisé le OBJECT_ID()
fonction pour renvoyer l'ID de la procédure stockée, ce qui m'a évité d'avoir à connaître l'ID réel.
Voir Fonctionnement de sys.dm_exec_describe_first_result_set_for_object pour plus d'informations et des exemples pour cette fonction.