Partage via


sys.dm_exec_describe_first_result_set (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Cette fonction de gestion dynamique prend une instruction Transact-SQL comme paramètre et retourne les métadonnées du premier ensemble de résultats de l’énoncé.

sys.dm_exec_describe_first_result_set renvoie la même définition de l’ensemble de résultats que sys.dm_exec_describe_first_result_set_for_object et est similaire à sp_describe_first_result_set.

Conventions de la syntaxe Transact-SQL

Syntaxe

sys.dm_exec_describe_first_result_set(@tsql , @params , @include_browse_information)

Arguments

@tsql

Une ou plusieurs instructions Transact-SQL. Le @tsql lot peut être nvarchar(n) ou nvarchar(max).

@params

@params fournit une chaîne de déclaration pour les paramètres du Transact-SQL lot, similaire à sp_executesql. Les paramètres peuvent être nvarchar(n) ou nvarchar(max).

Une seule chaîne contenant les définitions de tous les paramètres intégrés dans le @tsql lot. Cette chaîne doit être une constante Unicode ou une variable Unicode. Chaque définition de paramètre se compose d'un nom de paramètre et d'un type de données. n correspond à un espace réservé pour d’autres définitions de paramètres. Chaque paramètre spécifié dans stmt doit être défini en @params. Si l’instruction Transact-SQL ou le lot de l’instruction ne contient pas de paramètres, @params n’est pas obligatoire. NULL est la valeur par défaut de ce paramètre.

@include_browse_information

Si elle est réglée à 1, chaque requête est analysée comme si elle avait une FOR BROWSE option sur la requête. Le résultat comprend des colonnes clés supplémentaires et des informations sur la table des sources.

Table retournée

La fonction renvoie ces métadonnées courantes sous forme d’ensemble de résultats. Chaque ligne correspond à une colonne dans les métadonnées des résultats et décrit le type et la nullité de la colonne dans le format montré dans le tableau suivant. Si la première instruction n’existe pas pour chaque chemin de contrôle, la fonction retourne un ensemble de résultats avec zéro ligne.

Nom de la colonne Type de données Description
is_hidden bit Précise que la colonne est une colonne supplémentaire, ajoutée à des fins de navigation et d’information, qui n’apparaît pas réellement dans l’ensemble des résultats.
column_ordinal int Contient la position ordinale de la colonne dans le jeu de résultats. La position de la première colonne est spécifiée comme 1.
name sysname Contient le nom de la colonne si un nom peut être déterminé. Sinon, c’est NULL.
is_nullable bit Contient les valeurs suivantes :

Retourne 1 si la colonne permet NULL des valeurs.

Retour 0 si la colonne n’autorise NULL pas les valeurs.

Retour 1 si on ne peut pas déterminer que la colonne permet NULL des valeurs.
system_type_id int Contient le system_type_id de la colonne type de données spécifié dans sys.types. Pour les types CLR, même si la system_type_name colonne retourne NULL, cette colonne retourne 240.
system_type_name nvarchar (256) Contient le nom et les arguments (tels que la longueur, la précision, l'échelle) spécifiés pour le type de données de la colonne.

Si le type de données est un type d’alias défini par l’utilisateur, le type de système sous-jacent est spécifié ici.

Si le type de données est un type CLR défini par l’utilisateur, NULL est retourné dans cette colonne.
max_length smallint Longueur maximale (en octets) de la colonne.

-1 = Le type de données de colonne est varchar(max), nvarchar(max), varbinary(max)ou xml.

Pour les colonnes de texte , la max_length valeur est 16, ou la valeur définie par sp_tableoption 'text in row'.
precision tinyint Précision de la colonne si elle est numérique. Sinon, retourne 0.
scale tinyint Échelle de la colonne si elle est numérique. Sinon, retourne 0.
collation_name sysname Nom du classement de la colonne si elle est basée sur les caractères. Sinon, retourne NULL.
user_type_id int Pour les types CLR et alias, contient le user_type_id type de données de la colonne tel que spécifié dans sys.types. Sinon, c’est NULL.
user_type_database sysname Pour les types d'alias et CLR, contient le nom de la base de données dans laquelle le type est défini. Sinon, c’est NULL.
user_type_schema sysname Pour les types d'alias et CLR, contient le nom du schéma dans lequel le type est défini. Sinon, c’est NULL.
user_type_name sysname Pour les types d'alias et CLR, contient le nom du type. Sinon, c’est NULL.
assembly_qualified_type_name nvarchar(4000) Pour les types CLR, retourne le nom de l'assembly et de la classe définissant le type. Sinon, c’est NULL.
xml_collection_id int Contient le xml_collection_id type de données de la colonne comme spécifié dans sys.columns. Cette colonne retourne NULL si le type retourné n’est pas associé à une collection de schémas XML.
xml_collection_database sysname Contient la base de données dans laquelle la collection de schémas XML associée à ce type est définie. Cette colonne retourne NULL si le type retourné n’est pas associé à une collection de schémas XML.
xml_collection_schema sysname Contient le schéma dans lequel la collection de schémas XML associée à ce type est définie. Cette colonne retourne NULL si le type retourné n’est pas associé à une collection de schémas XML.
xml_collection_name sysname Contient le nom de la collection de schémas XML associé à ce type. Cette colonne retourne NULL si le type retourné n’est pas associé à une collection de schémas XML.
is_xml_document bit Retour 1 si le type de données retourné est XML et que ce type est garanti d’être un document XML complet (incluant un nœud racine, et non un fragment XML). Sinon, retourne 0.
is_case_sensitive bit Return 1 si la colonne est de type chaîne sensible à la casse. Retour 0 si ce n’est pas le cas.
is_fixed_length_clr_type bit Rendement 1 si la colonne est de type CLR à longueur fixe. Retour 0 si ce n’est pas le cas.
source_server sysname Nom du serveur d'origine (s'il provient d'un serveur distant). Le nom est donné tel qu’il apparaît dans sys.servers. Retourne NULL si la colonne provient du serveur local ou si elle ne peut pas être déterminée sur le serveur sur lequel elle provient. Fourni uniquement si les informations de navigation sont demandées.
source_database sysname Nom de la base de données d'origine retourné par la colonne dans ce résultat. Retourne NULL si la base de données ne peut pas être déterminée. Fourni uniquement si les informations de navigation sont demandées.
source_schema sysname Nom du schéma d'origine retourné par la colonne dans ce résultat. Retourne NULL si le schéma ne peut pas être déterminé. Fourni uniquement si les informations de navigation sont demandées.
source_table sysname Nom de la table d'origine retourné par la colonne dans ce résultat. Retourne NULL si la table ne peut pas être déterminée. Fourni uniquement si les informations de navigation sont demandées.
source_column sysname Nom de la colonne d'origine retourné par la colonne de résultat. Retourne NULL si la colonne ne peut pas être déterminée. Fourni uniquement si les informations de navigation sont demandées.
is_identity_column bit Retourne 1 si la colonne est une colonne identité, et 0 sinon. Retourne NULL s’il ne peut pas être déterminé que la colonne est une colonne d’identité.
is_part_of_unique_key bit Rend 1 si la colonne fait partie d’un indice unique (y compris les contraintes uniques et primaires) et 0 si ce n’est pas le cas. Retourne NULL s’il ne peut pas être déterminé que la colonne fait partie d’un index unique. Fourni uniquement si les informations de navigation sont demandées.
is_updateable bit Retourne 1 si la colonne est actualisable et 0 si ce n’est pas le cas. Retourne NULL s’il ne peut pas être déterminé que la colonne peut être mise à jour.
is_computed_column bit Rend 1 si la colonne est une colonne calculée et 0 si ce n’est pas le cas. Retour NULL si on ne peut pas déterminer si la colonne est une colonne calculée.
is_sparse_column_set bit Retourne 1 si la colonne est clairsemée et 0 sinon. Retour NULL si on ne peut pas déterminer que la colonne fait partie d’un ensemble de colonnes clairsemées.
ordinal_in_order_by_list smallint La position de cette colonne est dans ORDER BY la liste. Retour NULL si la colonne n’apparaît pas dans la ORDER BY liste, ou si la ORDER BY liste ne peut pas être déterminée de manière unique.
order_by_list_length smallint La longueur de la ORDER BY liste. NULL est retourné s’il n’y a pas ORDER BY de liste ou si la ORDER BY liste ne peut pas être déterminée de manière unique. Cette valeur est la même pour toutes les lignes retournées par sp_describe_first_result_set.
order_by_is_descending smallint Si ce ordinal_in_order_by_list n’est pas NULLle cas, la order_by_is_descending colonne signale la direction de la ORDER BY clause pour cette colonne. Sinon, il signale NULL.
error_number int Contient le numéro d'erreur retourné par la fonction. Si aucune erreur n’est survenue, la colonne contient NULL.
error_severity int Contient la gravité retournée par la fonction. Si aucune erreur n’est survenue, la colonne contient NULL.
error_state int Contient le message d’état retourné par la fonction. Si aucune erreur n’est survenue, la colonne contient NULL.
error_message nvarchar(4096) Contient le message retourné par la fonction. Si aucune erreur n’est survenue, la colonne contient NULL.
error_type int Contient un entier qui représente l'erreur retournée. Mappe à error_type_desc. Consultez la liste sous les notes.
error_type_desc nvarchar(60) Contient une chaîne majuscule courte qui représente l'erreur retournée. Mappe à error_type. Consultez la liste sous les notes.

Notes

Cette fonction utilise le même algorithme que sp_describe_first_result_set. Pour plus d’informations, voir sp_describe_first_result_set.

Le tableau suivant présente les types d’erreurs et leurs descriptions.

error_type error_type Description
1 MISC Toutes des erreurs qui ne sont pas décrites autrement.
2 SYNTAX Une erreur de syntaxe s'est produite dans le lot.
3 CONFLICTING_RESULTS Le résultat n’a pas pu être déterminé en raison d’un conflit entre deux énoncés possibles de première formulation.
4 DYNAMIC_SQL Le résultat n’a pas pu être déterminé à cause du SQL dynamique qui pourrait potentiellement retourner le premier résultat.
5 CLR_PROCEDURE Le résultat n’a pas pu être déterminé car une procédure stockée CLR pourrait potentiellement retourner le premier résultat.
6 CLR_TRIGGER Le résultat n’a pas pu être déterminé car un déclencheur CLR pourrait potentiellement renvoyer le premier résultat.
7 EXTENDED_PROCEDURE Le résultat n’a pas pu être déterminé car une procédure stockée prolongée pourrait potentiellement restituer le premier résultat.
8 UNDECLARED_PARAMETER Le résultat n’a pas pu être déterminé car le type de données d’une ou plusieurs colonnes de l’ensemble de résultats dépend potentiellement d’un paramètre non déclaré.
9 RECURSION Le résultat n’a pas pu être déterminé car le lot contient une instruction récursive.
10 TEMPORARY_TABLE Le résultat n’a pas pu être déterminé car le lot contient une table temporaire et n’est pas supporté par sp_describe_first_result_set .
11 UNSUPPORTED_STATEMENT Le résultat n’a pas pu être déterminé car le lot contient une instruction qui n’est pas prise en charge par sp_describe_first_result_set (par exemple, FETCH, REVERT, etc.).
12 OBJECT_TYPE_NOT_SUPPORTED Le @object_id « passé à la fonction » n’est pas pris en charge (c’est-à-dire que ce n’est pas une procédure stockée).
13 OBJECT_DOES_NOT_EXIST Le @object_id « passé à la fonction » n’est pas trouvé dans le catalogue système.

autorisations

Nécessite l’autorisation d’exécuter l’argument @tsql.

Exemples

Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.

Vous pouvez adapter les exemples de l’article sp_describe_first_result_set pour utiliser sys.dm_exec_describe_first_result_set.

R : Informations de retour sur un relevé de Transact-SQL unique

Le code suivant retourne des informations sur les résultats d’une instruction Transact-SQL.

USE @AdventureWorks2025;

SELECT *
FROM sys.dm_exec_describe_first_result_set (
    N'SELECT object_id, name, type_desc FROM sys.indexes', null, 0
);

B. Informations de retour sur une procédure

L’exemple suivant crée une procédure stockée nommée pr_TestProc qui retourne deux ensembles de résultats. Ensuite, l’exemple démontre que cela sys.dm_exec_describe_first_result_set renvoie des informations sur le premier ensemble de résultats de la procédure.

USE @AdventureWorks2025;
GO

CREATE PROC Production.TestProc
AS
    SELECT Name, ProductID, Color
    FROM Production.Product;

    SELECT Name, SafetyStockLevel, SellStartDate
    FROM Production.Product;
GO

SELECT *
FROM sys.dm_exec_describe_first_result_set('Production.TestProc', NULL, 0);

C. Retourner les métadonnées d’un lot contenant plusieurs instructions

L’exemple suivant évalue un lot qui contient deux instructions Transact-SQL. Le jeu de résultats décrit le premier jeu de résultats retourné.

USE AdventureWorks2025;
GO

SELECT *
FROM sys.dm_exec_describe_first_result_set(
    N'SELECT CustomerID, TerritoryID, AccountNumber FROM Sales.Customer WHERE CustomerID = @CustomerID;SELECT * FROM Sales.SalesOrderHeader;',
    N'@CustomerID int',
    0
) AS a;