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

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2012)simAzure SQL DatabasenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retorna os metadados para o primeiro resultado possíveis do conjunto do Transact-SQLTransact-SQL em lotes.Returns the metadata for the first possible result set of the Transact-SQLTransact-SQL batch. Retorna um conjunto de resultados vazio quando o lote não retorna resultados.Returns an empty result set if the batch returns no results. Gera um erro se o Mecanismo de Banco de DadosDatabase Engine não é possível determinar os metadados para a primeira consulta que será executada por meio de uma análise estática.Raises an error if the Mecanismo de Banco de DadosDatabase Engine cannot determine the metadata for the first query that will be executed by performing a static analysis. O modo de exibição de gerenciamento dinâmico sys.DM exec_describe_first_result_set ( Transact-SQL ) retorna as mesmas informações.The dynamic management view sys.dm_exec_describe_first_result_set (Transact-SQL) returns the same information.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax


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

ArgumentosArguments

[ @tsql = ] 'SQL_batch transact'[ @tsql = ] 'Transact-SQL_batch'
Uma ou mais instruções Transact-SQLTransact-SQL.One or more Transact-SQLTransact-SQL statements. Transact-SQL_batch podem ser nvarchar (n) ou nvarchar (max).Transact-SQL_batch may be nvarchar(n) or nvarchar(max).

[ @params = ] N'parâmetros'[ @params = ] N'parameters'
@paramsFornece uma cadeia de caracteres de declaração para os parâmetros para o Transact-SQLTransact-SQL lote, que é similar a sp_executesql.@params provides a declaration string for parameters for the Transact-SQLTransact-SQL batch, which is similar to sp_executesql. Parâmetros podem ser nvarchar ou nvarchar (max).Parameters may be nvarchar(n) or nvarchar(max).

É uma cadeia de caracteres que contém as definições de todos os parâmetros inseridos no Transact-SQLTransact-SQL _batch.Is one string that contains the definitions of all parameters that have been embedded in the Transact-SQLTransact-SQL_batch. A cadeia de caracteres deve ser uma constante Unicode ou uma variável Unicode.The string must be either a Unicode constant or a Unicode variable. Cada definição de parâmetro consiste em um nome de parâmetro e um tipo de dados.Each parameter definition consists of a parameter name and a data type. né um espaço reservado que indica definições de parâmetro adicionais.n is a placeholder that indicates additional parameter definitions. Todo parâmetro especificado na instrução deve ser definido em @params.Every parameter specified in the statement must be defined in @params. Se o Transact-SQLTransact-SQL instrução ou lote na instrução não contiver parâmetros, @params não é necessária.If the Transact-SQLTransact-SQL statement or batch in the statement does not contain parameters, @params is not required. NULL é o valor padrão para esse parâmetro.NULL is the default value for this parameter.

[ @browse_information_mode = ] tinyint[ @browse_information_mode = ] tinyint
Especifica se colunas de chave adicionais e informações de tabela de origem são retornadas.Specifies if additional key columns and source table information are returned. Se definido como 1, cada consulta será analisada como se incluísse uma opção FOR BROWSE na consulta.If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. Colunas de chave adicionais e informações de tabela de origem são retornadas.Additional key columns and source table information are returned.

  • Se for definido como 0, nenhuma informação será retornada.If set to 0, no information is returned.

  • Se definido como 1, cada consulta será analisada como se incluísse uma opção FOR BROWSE na consulta.If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. Isto retornará nomes de tabela base como as informações de coluna de origem.This will return base table names as the source column information.

  • Se for definido como 2, cada consulta será analisada como se fosse usada na preparação ou execução de um cursor.If set to 2, each query is analyzed as if it would be used in preparing or executing a cursor. Isto retornará nomes de exibição como as informações de coluna de origem.This will return view names as source column information.

Valores do código de retornoReturn Code Values

sp_describe_first_result_set sempre retorna um status de zero em caso de sucesso.sp_describe_first_result_set always returns a status of zero on success. Se o procedimento lançar um erro e o procedimento é chamado como uma RPC, o status de retorno é preenchido com o tipo de erro descrito na coluna 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. Se o procedimento for chamado de Transact-SQLTransact-SQL, o valor de retorno sempre será zero, até mesmo se houver erro.If the procedure is called from Transact-SQLTransact-SQL, the return value is always zero, even when there is an error.

Conjuntos de resultadosResult Sets

Estes metadados comuns são retornados como um conjunto de resultados com uma linha para cada coluna nos metadados de resultados.This common metadata is returned as a result set with one row for each column in the results metadata. Cada linha descreve o tipo e a nulidade da coluna no formato descrito na seção a seguir.Each row describes the type and nullability of the column in the format described in the following section. Se a primeira instrução não existir para todo caminho de controle, um conjunto de resultados com zero linhas será retornado.If the first statement does not exist for every control path, a result set with zero rows is returned.

Nome da colunaColumn name Tipo de dadosData type DescriptionDescription
is_hiddenis_hidden bit não NULLbit NOT NULL Indica que a coluna é uma coluna extra adicionada para fins de informações de navegação e que ela não é exibida realmente no conjunto de resultados.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 não NULLint NOT NULL Contém a posição ordinal da coluna no conjunto de resultados.Contains the ordinal position of the column in the result set. A posição da primeira coluna será especificada como 1.The first column’s position will be specified as 1.
namename sysname NULLsysname NULL Conterá o nome da coluna se um nome puder ser determinado.Contains the name of the column if a name can be determined. Caso contrário, conterá NULL.Otherwise, it will contain NULL.
is_nullableis_nullable bit não NULLbit NOT NULL Conterá o valor 1 se a coluna permitir NULLs, 0 se a coluna não permitir NULLs e 1 caso não seja possível determinar se a coluna permite NULLs.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 não NULLint NOT NULL Contém o system_type_id do tipo de dados da coluna como especificado em sys. Types.Contains the system_type_id of the data type of the column as specified in sys.types. Para tipos de CLR, embora a coluna system_type_name retorne NULL, essa coluna retornará o valor 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 Contém o nome e argumentos (como comprimento, precisão, escala), especificados para o tipo de dados da coluna.Contains the name and arguments (such as length, precision, scale), specified for the data type of the column. Se o tipo de dados for um tipo de alias definido pelo usuário, o tipo de sistema subjacente será especificado aqui.If the data type is a user-defined alias type, the underlying system type is specified here. Se for um tipo de CLR definido pelo usuário, NULL será retornado nessa coluna.If it is a CLR user-defined type, NULL is returned in this column.
max_lengthmax_length smallint não NULLsmallint NOT NULL Comprimento máximo (em bytes) da coluna.Maximum length (in bytes) of the column.

-1 = a coluna de tipo de dados é varchar (max), nvarchar (max), varbinary (max), ou xml.-1 = Column data type is varchar(max), nvarchar(max), varbinary(max), or xml.

Para texto colunas, o max_length valor será 16 ou o valor definido por 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'.
precisãoprecision tinyint não NULLtinyint NOT NULL Precisão da coluna, se tiver base numérica.Precision of the column if numeric-based. Caso contrário, retorna 0.Otherwise returns 0.
escalascale tinyint não NULLtinyint NOT NULL Escala da coluna, se tiver base numérica.Scale of column if numeric-based. Caso contrário, retorna 0.Otherwise returns 0.
collation_namecollation_name sysname NULLsysname NULL Nome do agrupamento da coluna, se baseada em caracteres.Name of the collation of the column if character-based. Caso contrário, retornará NULL.Otherwise returns NULL.
user_type_iduser_type_id int NULLint NULL Para tipos de CLR e alias, contém o user_type_id do tipo de dados da coluna como especificado em sys.types.For CLR and alias types, contains the user_type_id of the data type of the column as specified in sys.types. Caso contrário, é NULL.Otherwise is NULL.
user_type_databaseuser_type_database sysname NULLsysname NULL Para tipos de CLR e de alias, contém o nome do banco de dados no qual o tipo é definido.For CLR and alias types, contains the name of the database in which the type is defined. Caso contrário, é NULL.Otherwise is NULL.
user_type_schemauser_type_schema sysname NULLsysname NULL Para tipos de CLR e de alias, contém o nome do esquema no qual o tipo é definido.For CLR and alias types, contains the name of the schema in which the type is defined. Caso contrário, é NULL.Otherwise is NULL.
user_type_nameuser_type_name sysname NULLsysname NULL Para tipos de CLR e de alias, contém o nome do tipo.For CLR and alias types, contains the name of the type. Caso contrário, é NULL.Otherwise is NULL.
assembly_qualified_type_nameassembly_qualified_type_name nvarchar(4000)nvarchar(4000) Para tipos de CLR, retorna o nome do assembly e da classe que define o tipo.For CLR types, returns the name of the assembly and class defining the type. Caso contrário, é NULL.Otherwise is NULL.
xml_collection_idxml_collection_id int NULLint NULL Contém o xml_collection_id do tipo de dados da coluna como especificado em sys.columns.Contains the xml_collection_id of the data type of the column as specified in sys.columns. Essa coluna retornará NULL se o tipo retornado não estiver associado uma coleção de esquemas 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 Contém o banco de dados no qual a coleção de esquemas XML associada a esse tipo está definida.Contains the database in which the XML schema collection associated with this type is defined. Essa coluna retornará NULL se o tipo retornado não estiver associado uma coleção de esquemas 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 Contém o esquema no qual a coleção de esquemas XML associada a esse tipo está definida.Contains the schema in which the XML schema collection associated with this type is defined. Essa coluna retornará NULL se o tipo retornado não estiver associado uma coleção de esquemas 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 Contém o nome da coleção de esquemas XML associada a esse tipo.Contains the name of the XML schema collection associated with this type. Essa coluna retornará NULL se o tipo retornado não estiver associado uma coleção de esquemas XML.This column will return NULL if the type returned is not associated with an XML schema collection.
is_xml_documentis_xml_document bit não NULLbit NOT NULL Retornará 1 se o tipo de dados retornado for o XML e esse tipo for garantido de ser um documento XML completo (incluindo um nó raiz), em vez de um fragmento 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). Caso contrário, retorna 0.Otherwise returns 0.
is_case_sensitiveis_case_sensitive bit não NULLbit NOT NULL Retornará 1 se a coluna for um tipo de cadeia de caracteres com diferenciação de maiúsculas e minúsculas; caso contrário, retornará 0.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 não NULLbit NOT NULL Retornará 1 se a coluna for um tipo de CLR de comprimento fixo; caso contrário, retornará 0.Returns 1 if the column is a fixed-length CLR type and 0 if it is not.
source_serversource_server sysnamesysname Nome do servidor de origem retornado pela coluna neste resultado (se a origem for um servidor remoto).Name of the originating server returned by the column in this result (if it originates from a remote server). O nome é fornecido como ele aparece em sys.The name is given as it appears in sys.servers. Retornará NULL se a coluna tiver origem no servidor local ou caso não seja possível determinar o servidor de origem.Returns NULL if the column originates on the local server or if it cannot be determined which server it originates on. Será populado somente se informações de navegação são solicitadas.Is only populated if browsing information is requested.
source_databasesource_database sysnamesysname Nome do banco de dados de origem retornado pela coluna neste resultado.Name of the originating database returned by the column in this result. Retornará NULL se o banco de dados não puder ser determinado.Returns NULL if the database cannot be determined. Será populado somente se informações de navegação são solicitadas.Is only populated if browsing information is requested.
source_schemasource_schema sysnamesysname Nome do esquema de origem retornado pela coluna neste resultado.Name of the originating schema returned by the column in this result. Retornará NULL se o esquema não puder ser determinado.Returns NULL if the schema cannot be determined. Será populado somente se informações de navegação são solicitadas.Is only populated if browsing information is requested.
source_tablesource_table sysnamesysname Nome da tabela de origem retornado pela coluna neste resultado.Name of the originating table returned by the column in this result. Retornará NULL se a tabela não puder ser determinada.Returns NULL if the table cannot be determined. Será populado somente se informações de navegação são solicitadas.Is only populated if browsing information is requested.
source_columnsource_column sysnamesysname Nome da coluna de origem retornado pela coluna de resultado.Name of the originating column returned by the result column. Retornará NULL se a coluna não puder ser determinada.Returns NULL if the column cannot be determined. Será populado somente se informações de navegação são solicitadas.Is only populated if browsing information is requested.
is_identity_columnis_identity_column bit nulobit NULL Retornará 1 se a coluna for uma coluna de identidade; caso contrário, retornará 0.Returns 1 if the column is an identity column and 0 if not. Retornará NULL caso não seja possível determinar se a coluna é uma coluna de identidade.Returns NULL if it cannot be determined that the column is an identity column.
is_part_of_unique_keyis_part_of_unique_key bit nulobit NULL Retornará 1 se a coluna fizer parte de um índice exclusivo (incluindo restrição exclusiva e primária); caso contrário, retornará 0.Returns 1 if the column is part of a unique index (including unique and primary constraint) and 0 if not. Retornará NULL caso não seja possível determinar se a coluna faz parte de um índice exclusivo.Returns NULL if it cannot be determined that the column is part of a unique index. Será populado somente se informações de navegação forem solicitadas.Only populated if browsing information is requested.
is_updateableis_updateable bit nulobit NULL Retornará 1 se a coluna for uma coluna atualizável; caso contrário, retornará 0.Returns 1 if the column is updateable and 0 if not. Retornará NULL caso não seja possível determinar se a coluna é atualizável.Returns NULL if it cannot be determined that the column is updateable.
is_computed_columnis_computed_column bit nulobit NULL Retornará 1 se a coluna for uma coluna computada; caso contrário, retornará 0.Returns 1 if the column is a computed column and 0 if not. Retorna NULL se não puder ser determinado que a coluna é uma coluna computada.Returns NULL if it cannot be determined that the column is a computed column.
is_sparse_column_setis_sparse_column_set bit nulobit NULL Retornará 1 se a coluna for uma coluna esparsa; caso contrário, retornará 0.Returns 1 if the column is a sparse column and 0 if not. Retorna NULL se não for possível determinar se a coluna faz parte de um conjunto de colunas esparsas.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 Posição desta coluna na lista ORDER BY.Position of this column in ORDER BY list. Retornará NULL se a coluna não aparecer na lista ORDER BY ou se a lista ORDER BY não puder ser determinada exclusivamente.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 Comprimento da lista ORDER BY.Length of the ORDER BY list. Retornará NULL se não houver uma lista ORDER BY ou se a lista ORDER BY não puder ser determinada exclusivamente.Returns NULL if there is no ORDER BY list or if the ORDER BY list cannot be uniquely determined. Observe que esse valor será o mesmo para todas as linhas retornadas por 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 Se o ordinal_in_order_by_list não for NULL, o order_by_is_descending coluna relatará a direção da cláusula ORDER BY para essa coluna.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. Caso contrário, relatará NULL.Otherwise it reports NULL.
tds_type_idtds_type_id int não NULLint NOT NULL Para uso interno.For internal use.
tds_lengthtds_length int não NULLint NOT NULL Para uso interno.For internal use.
tds_collation_idtds_collation_id int NULLint NULL Para uso interno.For internal use.
tds_collation_sort_idtds_collation_sort_id tinyint NULLtinyint NULL Para uso interno.For internal use.

RemarksRemarks

sp_describe_first_result_set garante que se o procedimento retorna os metadados do primeiro conjunto de resultados para (um hipotético) lote A e, se esse lote (A) for subsequentemente executado, em seguida, o lote será (1) gera um erro de tempo de otimização, (2) gera um erro de tempo de execução, (3) não retornará nenhum resultado definida ou (4) retorna um primeiro conjunto de resultados com os mesmos metadados descritos por 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.

O nome, a nulidade e o tipo de dados podem diferir.The name, nullability, and data type can differ. Se sp_describe_first_result_set retorna um conjunto de resultados vazio, a garantia é que a execução do lote retornará conjuntos sem resultados.If sp_describe_first_result_set returns an empty result set, the guarantee is that the batch execution will return no-result sets.

Essa garantia presume que não existem alterações de esquema relevantes no servidor.This guarantee presumes there are are no relevant schema changes on the server. Alterações de esquema relevantes no servidor não incluem a criação de tabelas temporárias ou variáveis de tabela no lote A entre a hora em que sp_describe_first_result_set é chamado e a hora em que o conjunto de resultados é retornado durante execução, inclusive alterações de esquema feitas pelo lote 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 retorna um erro em qualquer um dos seguintes casos.sp_describe_first_result_set returns an error in any of the following cases.

  • Se a entrada @tsql não é válido Transact-SQLTransact-SQL em lotes.If the input @tsql is not a valid Transact-SQLTransact-SQL batch. Validade é determinada pela análise de Transact-SQLTransact-SQL em lotes.Validity is determined by parsing and analyzing the Transact-SQLTransact-SQL batch. Os erros causados pelo lote durante a otimização da consulta ou durante a execução não são considerados ao determinar se o Transact-SQLTransact-SQL lote é válido.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.

  • Se @params não for NULL e contém uma cadeia de caracteres que não é uma cadeia de caracteres de declaração sintaticamente válida para parâmetros, ou se ele contém uma cadeia de caracteres que declare qualquer parâmetro mais de uma vez.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.

  • Se a entrada Transact-SQLTransact-SQL lote declara uma variável local de mesmo nome como um parâmetro declarado em @params.If the input Transact-SQLTransact-SQL batch declares a local variable of the same name as a parameter declared in @params.

  • Se a instrução usar uma tabela temporária.If the statement uses a temporary table.

  • A consulta inclui a criação de uma tabela permanente que é então consultada.The query includes the creation of a permanent table that is then queried.

    Se todas as outras verificações forem bem-sucedidas, serão considerados todos os caminhos de fluxo de controle possíveis dentro do lote de entrada.If all other checks succeed, all possible control flow paths inside the input batch are considered. Este leva em conta todo o controle instruções de fluxo (GOTO, IF/ELSE, WHILE e Transact-SQLTransact-SQL blocos TRY/CATCH), bem como quaisquer procedimentos, dinâmicos Transact-SQLTransact-SQL lotes ou gatilhos invocados de lote de entrada por uma instrução EXEC, uma instrução DDL que causa Gatilhos DDL para ser acionado, ou uma instrução DML que faz com que os gatilhos ser acionado em uma tabela de destino ou em uma tabela que é modificada por causa de ação em cascata em uma restrição foreign key.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. No caso de muitos possíveis caminhos de controle, em algum ponto, um algoritmo para.In the case of many possible control paths, at some point an algorithm stops.

    Para cada caminho de fluxo de controle, a primeira instrução (se houver) que retorna um conjunto de resultados é determinado pelo 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.

    Quando houver várias e possíveis primeiras instruções em um lote, seus resultados podem diferir no número de colunas, no nome da coluna, na nulidade e no tipo de dados.When multiple possible first statements are found in a batch, their results can differ in number of columns, column name, nullability, and data type. Veja aqui mais detalhadamente como essas diferenças são tratadas:How these differences are handled is described in more detail here:

  • Se o número de colunas diferir, um erro será gerado e nenhum resultado será retornado.If the number of columns differs, an error is thrown and no result is returned.

  • Se o nome da coluna diferir, o nome da coluna retornado será definido como NULL.If the column name differs, the column name returned is set to NULL.

  • Se a nulidade diferir, a nulidade retornada permitirá NULLs.It the nullability differs, the nullability returned will allow NULLs.

  • Se o tipo de dados diferir, um erro será gerado e nenhum resultado será retornado, exceto nos seguintes casos:If the data type differs, an error will be thrown and no result is returned except for the following cases:

    • varchar(a) para varchar(a') onde um ' > um.varchar(a) to varchar(a') where a' > a.

    • varchar(a) para varchar (max)varchar(a) to varchar(max)

    • nvarchar(a) para nvarchar(a') onde um ' > um.nvarchar(a) to nvarchar(a') where a' > a.

    • nvarchar(a) para nvarchar (max)nvarchar(a) to nvarchar(max)

    • varbinary(a) para varbinary(a') onde um ' > um.varbinary(a) to varbinary(a') where a' > a.

    • varbinary(a) para varbinary (max)varbinary(a) to varbinary(max)

    sp_describe_first_result_set não oferece suporte a recursão indireta.sp_describe_first_result_set does not support indirect recursion.

PermissõesPermissions

Requer permissão para executar o @tsql argumento.Requires permission to execute the @tsql argument.

ExemplosExamples

Exemplos típicosTypical Examples

A.A. Exemplo simplesSimple Example

O exemplo a seguir descreve o conjunto de resultados retornado de uma única consulta.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'  

O exemplo a seguir mostra o conjunto de resultados retornado de uma única consulta que contém um parâmetro.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. Exemplos do modo de procuraBrowse Mode Examples

Os três exemplos a seguir ilustram a principal diferença entre os modos de procurar informações.The following three examples illustrate the key difference between the different browse information modes. Somente as colunas relevantes foram incluídas nos resultados da consulta.Only the relevant columns have been included in the query results.

Exemplo que usa 0 indicando que nenhuma informação foi retornada.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;  

Aqui está o conjunto de resultados.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

Exemplo que usa 1 indicando que retorna informações como se incluísse uma opção FOR BROWSE na consulta.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  

Aqui está o conjunto de resultados.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

Exemplo que usa 2 indicando que foi analisado como se você estivesse preparando um cursor.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  

Aqui está o conjunto de resultados.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

Exemplos de problemasExamples of problems

Os exemplos a seguir usam duas tabelas para todos os exemplos.The following examples use two tables for all examples. Execute as seguintes instruções para criar as tabelas de exemplo.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);  

Erro porque o número de colunas difereError because the number of columns differ

O número de colunas nos possíveis primeiros conjuntos de resultados difere neste exemplo.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.'  

Erro porque os tipos de dados diferemError because the data types differ

Os tipos de colunas diferem nos primeiros possíveis conjuntos de resultados diferentes.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;  

Resultado: Erro, tipos incompatíveis (int versus smallint).Result: Error, mismatching types (int vs. smallint).

O nome da coluna não pode ser determinadoColumn name cannot be determined

As colunas nos primeiros possíveis conjuntos de resultados diferem no comprimento para o mesmo tipo de comprimento variável, nulidade e nomes de coluna: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; '  

Resultado: <nome de coluna desconhecido > varchar (20) NULLResult: <Unknown Column Name> varchar(20) NULL

Nome de coluna forçado a ser idêntico via aliasColumn name forced to be identical through aliasing

Igual ao anterior, mas as colunas têm o mesmo nome via alias de coluna.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;'  

Resultado: b varchar (20) nuloResult: b varchar(20)NULL

Erro porque os tipos de coluna não podem ser correspondidosError because column types cannot be matched

Os tipos de coluna diferem nos primeiros possíveis conjuntos de resultados diferentes.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;'  

Resultado: Erro, tipos incompatíveis (varchar (10) versus nvarchar (10)).Result: Error, mismatching types (varchar(10) vs. nvarchar(10)).

O conjunto de resultados pode retornar um erroResult set can return an error

O primeiro conjunto de resultados é erro ou conjunto de resultados.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.;'  

Resultado: um intNULLResult: a intNULL

Alguns caminhos de código não retornam resultadosSome code paths return no results

O primeiro conjunto de resultados é nulo ou um conjunto de resultados.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;'  

Resultado: um intNULLResult: a intNULL

Resultado do SQL dinâmicoResult from dynamic SQL

O primeiro conjunto de resultados é SQL dinâmico, detectável porque é cadeia de caracteres literal.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'');'  

Resultado: um INT NULLResult: a INT NULL

Falha no resultado do SQL dinâmicoResult failure from dynamic SQL

O primeiro conjunto de resultados é indefinido devido ao SQL dinâmico.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); '  

Resultado: Erro.Result: Error. O resultado não é detectável devido ao SQL dinâmico.Result is not discoverable because of the dynamic SQL.

Conjunto de resultados especificado por usuárioResult set specified by user

O primeiro conjunto de resultados é especificado manualmente pelo usuário.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)  
    ); '  

Resultado: Column1 bigint não NULLResult: Column1 bigint NOT NULL

Erro causado por um conjunto de resultados ambíguoError caused by a ambiguous result set

Este exemplo presume que outro usuário nomeado Usuário1 tem uma tabela nomeada t1 no esquema padrão s1 com colunas (uma int não 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'  

Resultado: Erro.Result: Error. T1 pode ser dbo. T1 ou s1.t1, cada um com um número diferente de colunas.t1 can be either dbo.t1 or s1.t1, each with a different number of columns.

Resulta até mesmo com um conjunto de resultados ambíguoResult even with ambiguous result set

Use as mesmas suposições do exemplo anterior.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;'  

Resultado: um int NULL como DBO e S1 s1.t1.a tem tipo int e nulidade diferente.Result: a int NULL because both dbo.t1.a and s1.t1.a have type int and different nullability.

Consulte TambémSee 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)