sp_describe_first_result_set (Transact-SQL)sp_describe_first_result_set (Transact-SQL)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Retourne les métadonnées pour le premier possible de jeu de résultats de la Transact-SQLTransact-SQL batch.Returns the metadata for the first possible result set of the Transact-SQLTransact-SQL batch. Retourne un jeu de résultats vide si le lot ne retourne pas de résultats.Returns an empty result set if the batch returns no results. Génère une erreur si le Moteur de base de donnéesDatabase Engine ne peut pas déterminer les métadonnées pour la première requête qui sera exécutée en effectuant une analyse statique.Raises an error if the Moteur de base de donnéesDatabase Engine cannot determine the metadata for the first query that will be executed by performing a static analysis. La vue de gestion dynamique sys.dm_exec_describe_first_result_set (Transact-SQL) retourne les mêmes informations.The dynamic management view sys.dm_exec_describe_first_result_set (Transact-SQL) returns the same information.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

  
sp_describe_first_result_set [ @tsql = ] N'Transact-SQL_batch'   
    [ , [ @params = ] N'parameters' ]   
    [ , [ @browse_information_mode = ] <tinyint> ] ]  

ArgumentsArguments

[ \@tsql = ] 'Transact-SQL_batch' Un ou plusieurs Transact-SQLTransact-SQL instructions.[ \@tsql = ] 'Transact-SQL_batch' One or more Transact-SQLTransact-SQL statements. Transact-SQL_batch peut être nvarchar (n) ou nvarchar (max) .Transact-SQL_batch may be nvarchar(n) or nvarchar(max).

[ \@params = ] N'parameters' @params fournit une chaîne de déclaration pour les paramètres pour le Transact-SQLTransact-SQL bath, qui est similaire à sp_executesql.[ \@params = ] N'parameters' @params provides a declaration string for parameters for the Transact-SQLTransact-SQL batch, which is similar to sp_executesql. Les paramètres peuvent être nvarchar (n) ou nvarchar (max) .Parameters may be nvarchar(n) or nvarchar(max).

Est une chaîne qui contient les définitions de tous les paramètres qui ont été incorporés dans le Transact-SQLTransact-SQL _batch.Is one string that contains the definitions of all parameters that have been embedded in the Transact-SQLTransact-SQL_batch. Cette chaîne doit être une constante Unicode ou une variable Unicode.The string must be either a Unicode constant or a Unicode variable. Chaque définition de paramètre se compose d'un nom de paramètre et d'un type de données.Each parameter definition consists of a parameter name and a data type. n est un espace réservé qui indique les définitions de paramètres supplémentaires.n is a placeholder that indicates additional parameter definitions. Chaque paramètre spécifié dans l’instruction doit être défini dans @params.Every parameter specified in the statement must be defined in @params. Si le Transact-SQLTransact-SQL lot dans l’instruction ou l’instruction ne contient-elle pas de paramètres, @params n’est pas obligatoire.If the Transact-SQLTransact-SQL statement or batch in the statement does not contain parameters, @params is not required. NULL est la valeur par défaut pour ce paramètre.NULL is the default value for this parameter.

[ \@browse_information_mode = ] tinyint Spécifie si les colonnes clés supplémentaires et des informations sur la table source sont retournées.[ \@browse_information_mode = ] tinyint Specifies if additional key columns and source table information are returned. Si la valeur 1 est définie, chaque requête est analysée comme si elle incluait une option FOR BROWSE sur la requête.If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. Des colonnes clés supplémentaires et les informations de table source sont retournées.Additional key columns and source table information are returned.

  • Si la valeur est 0, aucune information n'est retournée.If set to 0, no information is returned.

  • Si la valeur 1 est définie, chaque requête est analysée comme si elle incluait une option FOR BROWSE sur la requête.If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. Retourne les noms de tables de base comme informations de colonne source.This will return base table names as the source column information.

  • Si la valeur 2 est définie, chaque requête est analysée comme si elle était utilisée lors de la préparation ou de l'exécution d'un curseur.If set to 2, each query is analyzed as if it would be used in preparing or executing a cursor. Retourne les noms de vues comme informations de colonne source.This will return view names as source column information.

Valeurs des codes de retourReturn Code Values

sp_describe_first_result_set retourne toujours un état de zéro en cas de réussite.sp_describe_first_result_set always returns a status of zero on success. Si la procédure génère une erreur et la procédure est appelée comme RPC, l’état de retour est remplie par le type d’erreur décrit dans la colonne error_type de sys.dm_exec_describe_first_result_set.If the procedure throws an error and the procedure is called as an RPC, return status is populated by the type of error described in the error_type column of sys.dm_exec_describe_first_result_set. Si la procédure est appelée de Transact-SQLTransact-SQL, la valeur de retour est toujours de zéro, même en présence d'une erreur.If the procedure is called from Transact-SQLTransact-SQL, the return value is always zero, even when there is an error.

Jeux de résultatsResult Sets

Ces métadonnées communes sont retournées en tant que jeu de résultats avec une ligne pour chaque colonne dans les métadonnées de résultats.This common metadata is returned as a result set with one row for each column in the results metadata. Chaque ligne décrit le type et la possibilité de valeur NULL de la colonne dans le format décrit dans la section suivante.Each row describes the type and nullability of the column in the format described in the following section. S'il n'existe pas de première instruction pour chaque chemin d'accès de contrôle, un jeu de résultats avec des lignes nulles est retourné.If the first statement does not exist for every control path, a result set with zero rows is returned.

Nom de la colonneColumn name Type de donnéesData type DescriptionDescription
is_hiddenis_hidden bit pas NULLbit NOT NULL Indique que la colonne est une colonne supplémentaire ajoutée à titre d'informations de navigation et qu'elle ne s'affiche pas réellement dans le jeu de résultats.Indicates that the column is an extra column added for browsing information purposes and that it does not actually appear in the result set.
column_ordinalcolumn_ordinal int non NULLint NOT NULL Contient la position ordinale de la colonne dans le jeu de résultats.Contains the ordinal position of the column in the result set. Position de la première colonne sera spécifiée comme 1.The first column's position will be specified as 1.
namename sysname NULLsysname NULL Contient le nom de la colonne si un nom peut être déterminé.Contains the name of the column if a name can be determined. Sinon, il contiendra NULL.Otherwise, it will contain NULL.
is_nullableis_nullable bit pas NULLbit NOT NULL Contient la valeur 1 si la colonne autorise des valeurs NULL, 0 si la colonne n'autorise pas de valeurs NULL, et 1 s'il n'est pas possible de déterminer si la colonne autorise des valeurs NULL.Contains the value 1 if the column allows NULLs, 0 if the column does not allow NULLs, and 1 if it cannot be determined if the column allows NULLs.
system_type_idsystem_type_id int non NULLint NOT NULL Contient le system_type_id du type de données de la colonne comme spécifié dans sys.types.Contains the system_type_id of the data type of the column as specified in sys.types. Pour les types CLR, bien que la colonne system_type_name retourne NULL, cette colonne retournera la valeur 240.For CLR types, even though the system_type_name column will return NULL, this column will return the value 240.
system_type_namesystem_type_name nvarchar (256) NULLnvarchar(256) NULL 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.Contains the name and arguments (such as length, precision, scale), specified for the data type of the column. 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.If the data type is a user-defined alias type, the underlying system type is specified here. S'il s'agit d'un type clr défini par l'utilisateur, NULL est retourné dans cette colonne.If it is a CLR user-defined type, NULL is returned in this column.
max_lengthmax_length smallint non NULLsmallint NOT NULL Longueur maximale (en octets) de la colonne.Maximum length (in bytes) of the column.

-1 = la colonne est de type de données varchar (max) , nvarchar (max) , varbinary (max) , ou xml.-1 = Column data type is varchar(max), nvarchar(max), varbinary(max), or xml.

Pour texte colonnes, le max_length valeur sera 16 ou la valeur définie par sp_tableoption 'text in row' .For text columns, the max_length value will be 16 or the value set by sp_tableoption 'text in row'.
precisionprecision tinyint non NULLtinyint NOT NULL Précision de la colonne si elle est numérique.Precision of the column if numeric-based. Dans le cas contraire, retourne la valeur 0.Otherwise returns 0.
scalescale tinyint non NULLtinyint NOT NULL Échelle de la colonne si elle est numérique.Scale of column if numeric-based. Dans le cas contraire, retourne la valeur 0.Otherwise returns 0.
collation_namecollation_name sysname NULLsysname NULL Nom du classement de la colonne si elle est basée sur les caractères.Name of the collation of the column if character-based. Sinon, retourne NULL.Otherwise returns NULL.
user_type_iduser_type_id int NULLint NULL Pour les types d'alias et CLR, contient l'information user_type_id du type de données de la colonne comme spécifié dans sys.types.For CLR and alias types, contains the user_type_id of the data type of the column as specified in sys.types. Sinon, a la valeur NULL.Otherwise is NULL.
user_type_databaseuser_type_database sysname NULLsysname NULL Pour les types d'alias et CLR, contient le nom de la base de données dans laquelle le type est défini.For CLR and alias types, contains the name of the database in which the type is defined. Sinon, a la valeur NULL.Otherwise is NULL.
user_type_schemauser_type_schema sysname NULLsysname NULL Pour les types d'alias et CLR, contient le nom du schéma dans lequel le type est défini.For CLR and alias types, contains the name of the schema in which the type is defined. Sinon, a la valeur NULL.Otherwise is NULL.
user_type_nameuser_type_name sysname NULLsysname NULL Pour les types d'alias et CLR, contient le nom du type.For CLR and alias types, contains the name of the type. Sinon, a la valeur NULL.Otherwise is NULL.
assembly_qualified_type_nameassembly_qualified_type_name nvarchar(4000)nvarchar(4000) Pour les types CLR, retourne le nom de l'assembly et de la classe définissant le type.For CLR types, returns the name of the assembly and class defining the type. Sinon, a la valeur NULL.Otherwise is NULL.
xml_collection_idxml_collection_id int NULLint NULL Contient l'information xml_collection_id du type de données de la colonne comme spécifié dans sys.columns.Contains the xml_collection_id of the data type of the column as specified in sys.columns. Cette colonne retournera NULL si le type retourné n'est pas associé à une collection de schémas XML.This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_databasexml_collection_database sysname NULLsysname NULL Contient la base de données dans laquelle la collection de schémas XML associée à ce type est définie.Contains the database in which the XML schema collection associated with this type is defined. Cette colonne retournera NULL si le type retourné n'est pas associé à une collection de schémas XML.This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_schemaxml_collection_schema sysname NULLsysname NULL Contient le schéma dans lequel la collection de schémas XML associée à ce type est définie.Contains the schema in which the XML schema collection associated with this type is defined. Cette colonne retournera NULL si le type retourné n'est pas associé à une collection de schémas XML.This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_namexml_collection_name sysname NULLsysname NULL Contient le nom de la collection de schémas XML associé à ce type.Contains the name of the XML schema collection associated with this type. Cette colonne retournera NULL si le type retourné n'est pas associé à une collection de schémas XML.This column will return NULL if the type returned is not associated with an XML schema collection.
is_xml_documentis_xml_document bit pas NULLbit NOT NULL Retourne 1 si le type de données retourné est XML et que ce type est garanti être un document XML complet (nœud racine compris), par opposition à un fragment XML.Returns 1 if the returned data type is XML and that type is guaranteed to be a complete XML document (including a root node), as opposed to an XML fragment). Dans le cas contraire, retourne la valeur 0.Otherwise returns 0.
is_case_sensitiveis_case_sensitive bit pas NULLbit NOT NULL Retourne 1 si la colonne est un type chaîne sensible à la casse et 0 si ce n'est pas le cas.Returns 1 if the column is a case-sensitive string type and 0 if it is not.
is_fixed_length_clr_typeis_fixed_length_clr_type bit pas NULLbit NOT NULL Retourne 1 si la colonne est un type CLR de longueur fixe et 0 si ce n'est pas le cas.Returns 1 if the column is a fixed-length CLR type and 0 if it is not.
source_serversource_server sysnamesysname Nom du serveur d'origine retourné par la colonne dans ce résultat (s'il provient d'un serveur distant).Name of the originating server returned by the column in this result (if it originates from a remote server). Le nom est donné tel qu’il apparaît dans sys.servers.The name is given as it appears in sys.servers. Retourne NULL si la colonne provient du serveur local, ou s'il est impossible de déterminer la provenance du serveur.Returns NULL if the column originates on the local server or if it cannot be determined which server it originates on. Est renseigné uniquement si les informations de navigation sont demandées.Is only populated if browsing information is requested.
source_databasesource_database sysnamesysname Nom de la base de données d'origine retourné par la colonne dans ce résultat.Name of the originating database returned by the column in this result. Retourne NULL si la base de données ne peut pas être déterminée.Returns NULL if the database cannot be determined. Est renseigné uniquement si les informations de navigation sont demandées.Is only populated if browsing information is requested.
source_schemasource_schema sysnamesysname Nom du schéma d'origine retourné par la colonne dans ce résultat.Name of the originating schema returned by the column in this result. Retourne NULL si le schéma ne peut pas être déterminé.Returns NULL if the schema cannot be determined. Est renseigné uniquement si les informations de navigation sont demandées.Is only populated if browsing information is requested.
source_tablesource_table sysnamesysname Nom de la table d'origine retourné par la colonne dans ce résultat.Name of the originating table returned by the column in this result. Retourne NULL si la table ne peut pas être déterminée.Returns NULL if the table cannot be determined. Est renseigné uniquement si les informations de navigation sont demandées.Is only populated if browsing information is requested.
source_columnsource_column sysnamesysname Nom de la colonne d'origine retourné par la colonne de résultat.Name of the originating column returned by the result column. Retourne NULL si la colonne ne peut pas être déterminée.Returns NULL if the column cannot be determined. Est renseigné uniquement si les informations de navigation sont demandées.Is only populated if browsing information is requested.
is_identity_columnis_identity_column bits NULLbit NULL Retourne 1 si la colonne est une colonne d'identité et 0 dans le cas contraire.Returns 1 if the column is an identity column and 0 if not. Retourne NULL s'il est impossible de déterminer que la colonne est une colonne d'identité.Returns NULL if it cannot be determined that the column is an identity column.
is_part_of_unique_keyis_part_of_unique_key bits NULLbit NULL Retourne 1 si la colonne fait partie d'un index unique (notamment la contrainte unique et primaire) et 0 dans le cas contraire.Returns 1 if the column is part of a unique index (including unique and primary constraint) and 0 if not. Retourne NULL s'il est impossible de déterminer que la colonne fait partie d'un index unique.Returns NULL if it cannot be determined that the column is part of a unique index. Fourni uniquement si les informations de navigation sont demandées.Only populated if browsing information is requested.
is_updateableis_updateable bits NULLbit NULL Retourne 1 si la colonne peut être mise à jour et 0 dans le cas contraire.Returns 1 if the column is updateable and 0 if not. Retourne NULL s'il est impossible de déterminer que la colonne peut être mise à jour.Returns NULL if it cannot be determined that the column is updateable.
is_computed_columnis_computed_column bits NULLbit NULL Retourne 1 si la colonne est une colonne calculée et 0 dans le cas contraire.Returns 1 if the column is a computed column and 0 if not. Retourne la valeur NULL s’il ne peut pas être déterminé que la colonne est une colonne calculée.Returns NULL if it cannot be determined that the column is a computed column.
is_sparse_column_setis_sparse_column_set bits NULLbit NULL Retourne 1 si la colonne est une colonne éparse et 0 dans le cas contraire.Returns 1 if the column is a sparse column and 0 if not. Retourne la valeur NULL s’il ne peut pas être déterminé que la colonne fait partie d’un jeu de colonnes éparses.Returns NULL if it cannot be determined that the column is part of a sparse column set.
ordinal_in_order_by_listordinal_in_order_by_list smallint NULLsmallint NULL Position de cette colonne dans la liste ORDER BY.Position of this column in ORDER BY list. Retourne NULL si la colonne n’apparaît pas dans la liste ORDER BY ou si la liste ORDER BY ne peut pas être déterminée de manière unique.Returns NULL if the column does not appear in the ORDER BY list or if the ORDER BY list cannot be uniquely determined.
order_by_list_lengthorder_by_list_length smallint NULLsmallint NULL Longueur de la liste ORDER BY.Length of the ORDER BY list. Retourne NULL s'il n'existe aucune liste ORDER BY ou si la liste ORDER BY ne peut pas être déterminée de manière unique.Returns NULL if there is no ORDER BY list or if the ORDER BY list cannot be uniquely determined. Notez que cette valeur sera la même pour toutes les lignes retournées par sp_describe_first_result_set.Note that this value will be the same for all rows returned by sp_describe_first_result_set.
order_by_is_descendingorder_by_is_descending smallint NULLsmallint NULL Si la valeur ordinal_in_order_by_list n’est pas NULL, le order_by_is_descending colonne indique la direction de la clause ORDER BY pour cette colonne.If the ordinal_in_order_by_list is not NULL, the order_by_is_descending column reports the direction of the ORDER BY clause for this column. Sinon, elle indique NULL.Otherwise it reports NULL.
tds_type_idtds_type_id int non NULLint NOT NULL À usage interne uniquement.For internal use.
tds_lengthtds_length int non NULLint NOT NULL À usage interne uniquement.For internal use.
tds_collation_idtds_collation_id int NULLint NULL À usage interne uniquement.For internal use.
tds_collation_sort_idtds_collation_sort_id tinyint NULLtinyint NULL À usage interne uniquement.For internal use.

NotesRemarks

sp_describe_first_result_set garanties que si la procédure retourne les premières métadonnées de jeu de résultats pour (un hypothétique) lot A et si ce lot (A) est ensuite exécutée ensuite le lot seront soit (1) déclenche une erreur au moment de l’optimisation, (2) déclenche une erreur d’exécution, (3) ne retourne aucun résultat défini, ou (4) retourne un premier jeu de résultats avec les mêmes métadonnées décrites par sp_describe_first_result_set.sp_describe_first_result_set guarantees that if the procedure returns the first result-set metadata for (a hypothetical) batch A and if that batch (A) is subsequently executed then the batch will either (1) raises an optimization-time error, (2) raises a run-time error, (3) returns no result set, or (4) returns a first result set with the same metadata described by sp_describe_first_result_set.

Le nom, la possibilité de valeur NULL et le type de données peuvent différer.The name, nullability, and data type can differ. Si sp_describe_first_result_set retourne un jeu de résultats vide, la garantie est que l’exécution du lot retournera des jeux sans résultats.If sp_describe_first_result_set returns an empty result set, the guarantee is that the batch execution will return no-result sets.

Cette garantie présume qu’il n’existe aucune modification de schéma pertinentes sur le serveur.This guarantee presumes there are no relevant schema changes on the server. Modifications de schéma pertinentes sur le serveur de ne pas inclure la création de tables temporaires ou variables de table dans le lot A entre le moment qui sp_describe_first_result_set est appelée et l’heure à laquelle le jeu de résultats est retourné pendant exécution, y compris les modifications de schéma effectuées par le lot B.Relevant schema changes on the server do not include creating a temporary tables or table variables in the batch A between the time that sp_describe_first_result_set is called and the time that the result set is returned during execution, including schema changes made by batch B.

sp_describe_first_result_set retourne une erreur dans chacun des cas suivants.sp_describe_first_result_set returns an error in any of the following cases.

  • Si l’entrée @tsql n’est pas valide Transact-SQLTransact-SQL batch.If the input @tsql is not a valid Transact-SQLTransact-SQL batch. La validité est déterminée en analysant le Transact-SQLTransact-SQL batch.Validity is determined by parsing and analyzing the Transact-SQLTransact-SQL batch. Toutes les erreurs provoquées par le lot pendant l’optimisation des requêtes ou lors de l’exécution ne sont pas considérés lors de la détermination de si le Transact-SQLTransact-SQL lot est valide.Any errors caused by the batch during query optimization or during execution are not considered when determining whether the Transact-SQLTransact-SQL batch is valid.

  • Si @params n’est pas NULL et contient une chaîne qui n’est pas une chaîne de déclaration syntaxiquement valide pour les paramètres, ou si elle contient une chaîne qui déclare un paramètre plusieurs fois.If @params is not NULL and contains a string that is not a syntactically valid declaration string for parameters, or if it contains a string that declares any parameter more than one time.

  • Si l’entrée Transact-SQLTransact-SQL lot déclare une variable locale du même nom qu’un paramètre déclaré dans @params.If the input Transact-SQLTransact-SQL batch declares a local variable of the same name as a parameter declared in @params.

  • Si l'instruction utilise une table temporaire.If the statement uses a temporary table.

  • La requête inclut la création d'une table permanente qui est alors interrogée.The query includes the creation of a permanent table that is then queried.

Si tous les autres contrôles réussissent, tous les chemins d'accès de flux de contrôle possibles à l'intérieur du lot d'entrée sont pris en compte.If all other checks succeed, all possible control flow paths inside the input batch are considered. Cette prend également en compte contrôle toutes les instructions de flux (GOTO, IF/ELSE, WHILE et Transact-SQLTransact-SQL blocs TRY/CATCH) ainsi que toutes les procédures, dynamiques Transact-SQLTransact-SQL lots ou des déclencheurs appelées à partir du lot d’entrée par une instruction EXEC, une instruction DDL qui provoque Les déclencheurs DDL à être activé, ou une instruction DML qui entraîne l’activation des déclencheurs sur une table cible ou sur une table qui a été modifiée en raison d’une action en cascade sur une contrainte de clé étrangère.This takes into account all control flow statements (GOTO, IF/ELSE, WHILE, and Transact-SQLTransact-SQL TRY/CATCH blocks) as well as any procedures, dynamic Transact-SQLTransact-SQL batches, or triggers invoked from the input batch by an EXEC statement, a DDL statement that causes DDL triggers to be fired, or a DML statement that causes triggers to be fired on a target table or on a table that is modified because of cascading action on a foreign key constraint. Dans le cas de nombreux chemins d'accès de contrôle possibles, un algorithme s'arrête à un point donné.In the case of many possible control paths, at some point an algorithm stops.

Pour chaque chemin d’accès de flux de contrôle, la première instruction (le cas échéant) qui retourne un jeu de résultats est déterminé par sp_describe_first_result_set.For each control flow path, the first statement (if any) that returns a result set is determined by sp_describe_first_result_set.

Lorsque plusieurs premières instructions possibles sont trouvées dans un lot, leurs résultats peuvent différer selon le nombre de colonnes, le nom de colonne, la possibilité de valeur NULL et le type de données.When multiple possible first statements are found in a batch, their results can differ in number of columns, column name, nullability, and data type. La gestion de ces différences fait l'objet d'une description plus détaillée dans cette rubrique :How these differences are handled is described in more detail here:

  • Si le nombre de colonnes diffère, une erreur est générée et aucun résultat n'est retourné.If the number of columns differs, an error is thrown and no result is returned.

  • Si le nom de colonne diffère, le nom de colonne retourné est défini sur NULL.If the column name differs, the column name returned is set to NULL.

  • Si la possibilité de valeur NULL diffère, la possibilité de valeur NULL retournée autorisera des valeurs NULL.It the nullability differs, the nullability returned will allow NULLs.

  • Si le type de données diffère, une erreur est générée et aucun résultat n'est retourné à l'exception des cas suivants :If the data type differs, an error will be thrown and no result is returned except for the following cases:

    • varchar(a) à varchar(a') où un ' > un.varchar(a) to varchar(a') where a' > a.

    • varchar(a) à varchar (max)varchar(a) to varchar(max)

    • nvarchar(a) à nvarchar(a') où un ' > un.nvarchar(a) to nvarchar(a') where a' > a.

    • nvarchar(a) à nvarchar (max)nvarchar(a) to nvarchar(max)

    • varbinary(a) à varbinary(a') où un ' > un.varbinary(a) to varbinary(a') where a' > a.

    • varbinary(a) à varbinary (max)varbinary(a) to varbinary(max)

sp_describe_first_result_set ne prend pas en charge la récursivité indirecte.sp_describe_first_result_set does not support indirect recursion.

AutorisationsPermissions

Nécessite l’autorisation d’exécuter le @tsql argument.Requires permission to execute the @tsql argument.

ExemplesExamples

Exemples typesTypical Examples

R.A. Exemple simpleSimple Example

L'exemple suivant décrit le jeu de résultats retourné par une requête unique.The following example describes the result set returned from a single query.

sp_describe_first_result_set @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes'  

L'exemple suivant affiche le jeu de résultats retourné par une requête unique qui contient un paramètre.The following example shows the result set returned from a single query that contains a parameter.

sp_describe_first_result_set @tsql =   
N'SELECT object_id, name, type_desc   
FROM sys.indexes   
WHERE object_id = @id1'  
, @params = N'@id1 int'  

B.B. Exemples de modes de navigationBrowse Mode Examples

Les trois exemples suivants illustrent la principale différence entre les différents modes de navigation.The following three examples illustrate the key difference between the different browse information modes. Seules les colonnes appropriées ont été incluses dans les résultats de la requête.Only the relevant columns have been included in the query results.

L'exemple qui utilise 0 indique qu'aucune information est retournée.Example using 0 indicating no information is returned.

CREATE TABLE dbo.t (a int PRIMARY KEY, b1 int);  
GO  
CREATE VIEW dbo.v AS SELECT b1 AS b2 FROM dbo.t;  
GO  
EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM dbo.v', null, 0;  

Voici l'ensemble des résultats.Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal namename source_schemasource_schema source_tablesource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 11 b3b3 NULLNULL NULLNULL NULLNULL NULLNULL

L'exemple qui utilise 1 indique qu'il retourne les informations comme s'il incluait une option FOR BROWSE sur la requête.Example using 1 indicating it returns information as if it includes a FOR BROWSE option on the query.

EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', null, 1  
  

Voici l'ensemble des résultats.Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal namename source_schemasource_schema source_tablesource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 11 b3b3 dbodbo tt B1B1 00
11 22 aa dbodbo tt aa 11

L'exemple qui utilise 2 indique une analyse comme si vous prépariez un curseur.Example using 2 indicating analyzed as if you are preparing a cursor.

EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', null, 2  

Voici l'ensemble des résultats.Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal namename source_schemasource_schema source_tablesource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 11 B3B3 dbodbo vv B2B2 00
11 22 ROWSTATROWSTAT NULLNULL NULLNULL NULLNULL 00

Exemples de problèmesExamples of problems

Les exemples suivants utilisent deux tables pour tous les exemples.The following examples use two tables for all examples. Exécutez les instructions suivantes pour créer les tables d'exemples.Execute the following statements to create the example tables.

CREATE TABLE dbo.t1 (a int NULL, b varchar(10) NULL, c nvarchar(10) NULL);  
CREATE TABLE dbo.t2 (a smallint NOT NULL, d varchar(20) NOT NULL, e int NOT NULL);  

Erreur car le nombre de colonnes diffèreError because the number of columns differ

Le nombre de colonnes dans les premiers jeux de résultats possibles diffère dans cet exemple.Number of columns in possible first result sets differ in this example.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT a FROM t1;  
ELSE  
    SELECT a, b FROM t1;  
SELECT * FROM t; -- Ignored, not a possible first result set.'  
  

Erreur car les types de données diffèrentError because the data types differ

Les types de colonnes diffèrent dans les premiers jeux de résultats possibles.Columns types differ in different possible first result sets.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT a FROM t1;  
ELSE  
    SELECT a FROM t2;  

Résultat : Erreur, types discordants (int et smallint).Result: Error, mismatching types (int vs. smallint).

Le nom de colonne ne peut pas être déterminéColumn name cannot be determined

Les colonnes dans les premiers jeux de résultats possibles diffèrent de par la longueur pour le même type de longueur variable, la possibilité de valeur NULL et les noms de colonne :Columns in possible first result sets differ by length for same variable length type, nullability, and column names:

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT d FROM t2; '  

Résultat : <Nom de colonne inconnu > varchar (20) NULLResult: <Unknown Column Name> varchar(20) NULL

Nom de colonne forcé à être identique par crénelageColumn name forced to be identical through aliasing

Identique à l'exemple précédent, mais les colonnes ont le même nom via le crénelage de colonne.Same as previous, but columns have the same name through column aliasing.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT d AS b FROM t2;'  

Résultat : b varchar (20) NULLResult: b varchar(20)NULL

Erreur car les types de colonne ne peuvent pas être mis en correspondanceError because column types cannot be matched

Les types de colonnes diffèrent dans possibles tout d’abord les jeux de résultats.The columns types differ in different possible first result sets.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT c FROM t1;'  

Résultat : Erreur, types discordants (varchar (10) et nvarchar (10) ).Result: Error, mismatching types (varchar(10) vs. nvarchar(10)).

Le jeu de résultats peut retourner une erreurResult set can return an error

Le premier jeu de résultats est soit une erreur, soit un jeu de résultats.First result set is either error or result set.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    RAISERROR(''Some Error'', 16, 1);  
  
ELSE  
    SELECT a FROM t1;  
SELECT e FROM t2; -- Ignored, not a possible first result set.;'  

Résultat : un intNULLResult: a intNULL

Certains chemins de code ne retournent pas de résultatsSome code paths return no results

Le premier jeu de résultats est soit Null, soit un jeu de résultats.First result set is either null or a result set.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    RETURN;  
SELECT a FROM t1;'  

Résultat : un intNULLResult: a intNULL

Résultat du SQL dynamiqueResult from dynamic SQL

Le premier jeu de résultats est SQL dynamique qui est détectable car il s'agit d'une chaîne littérale.First result set is dynamic SQL that is discoverable because it is a literal string.

sp_describe_first_result_set @tsql =   
N'EXEC(N''SELECT a FROM t1'');'  

Résultat : un INT NULLResult: a INT NULL

Échec du résultat du SQL dynamiqueResult failure from dynamic SQL

Le premier jeu de résultats est indéfini en raison du SQL dynamique.First result set is undefined because of dynamic SQL.

sp_describe_first_result_set @tsql =   
N'  
DECLARE @SQL NVARCHAR(max);  
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1 '';  
IF(1=1)  
    SET @SQL += N'' AND e > 10 '';  
EXEC(@SQL); '  

Résultat : Erreur.Result: Error. Le résultat n'est pas détectable en raison du SQL dynamique.Result is not discoverable because of the dynamic SQL.

Jeu de résultats spécifié par l'utilisateurResult set specified by user

Le premier jeu de résultats est spécifié manuellement par l'utilisateur.First result set is specified manually by user.

sp_describe_first_result_set @tsql =   
N'  
DECLARE @SQL NVARCHAR(max);  
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1 '';  
IF(1=1)  
    SET @SQL += N'' AND e > 10 '';  
EXEC(@SQL)  
    WITH RESULT SETS(  
        (Column1 BIGINT NOT NULL)  
    ); '  

Résultat : Colonne1 bigint non NULLResult: Column1 bigint NOT NULL

Erreur provoquée par un jeu de résultats ambiguError caused by a ambiguous result set

Cet exemple suppose qu’une table nommée t1 dans le schéma par défaut s1 avec des colonnes à un autre utilisateur nommé user1 (un int non NULL).This example assumes that another user named user1 has a table named t1 in the default schema s1 with columns (a int NOT NULL).

sp_describe_first_result_set @tsql =   
N'  
    IF(@p > 0)  
    EXECUTE AS USER = ''user1'';  
    SELECT * FROM t1;'  
, @params = N'@p int'  

Résultat : Erreur.Result: Error. T1 peut être dbo.t1 ou s1.t1, chacun avec un nombre différent de colonnes.t1 can be either dbo.t1 or s1.t1, each with a different number of columns.

Résultat même avec un jeu de résultats ambiguResult even with ambiguous result set

Utilisez les mêmes hypothèses que l'exemple précédent.Use the same assumptions as the previous example.

sp_describe_first_result_set @tsql =   
N'  
    IF(@p > 0)  
    EXECUTE AS USER = ''user1'';  
    SELECT a FROM t1;'  

Résultat : un int NULL car dbo.t1.a et s1.t1.a ont un type int et des valeurs NULL différentes.Result: a int NULL because both dbo.t1.a and s1.t1.a have type int and different nullability.

Voir aussiSee Also

sp_describe_undeclared_parameters (Transact-SQL) sp_describe_undeclared_parameters (Transact-SQL)
sys.dm_exec_describe_first_result_set (Transact-SQL) sys.dm_exec_describe_first_result_set (Transact-SQL)
sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)