Partilhar via


sys.dm_exec_describe_first_result_set (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Esta função de gestão dinâmica toma uma instrução Transact-SQL como parâmetro e descreve os metadados do primeiro conjunto de resultados da instrução.

sys.dm_exec_describe_first_result_set tem a mesma definição de conjunto de resultados que sys.dm_exec_describe_first_result_set_for_object (Transact-SQL) e é semelhante a sp_describe_first_result_set (Transact-SQL).

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

@tsql
Uma ou mais Transact-SQL declarações. Transact-SQL_batch pode ser nvarchar(n) ou nvarchar(max).

@params
@params fornece uma cadeia de declaração para parâmetros do lote Transact-SQL, semelhante à sp_executesql. Os parâmetros podem ser nvarchar(n) ou nvarchar(max).

É uma cadeia que contém as definições de todos os parâmetros que foram incorporados no Transact-SQL_batch. A cadeia de caracteres deve ser uma constante Unicode ou uma variável Unicode. Cada definição de parâmetro consiste em um nome de parâmetro e um tipo de dados. n é um espaço reservado que indica definições de parâmetros adicionais. Cada parâmetro especificado em stmt deve ser definido em @params. Se a instrução Transact-SQL ou lote na instrução não contiver parâmetros, @params não é obrigatório. NULL é o valor padrão deste parâmetro.

@include_browse_information
Se definida para 1, cada consulta é analisada como se tivesse uma opção FOR BROWSE na consulta. Colunas-chave adicionais e informações da tabela de origem são retornadas.

Tabela retornada

Estes metadados comuns são devolvidos como um conjunto de resultados. Uma linha para cada coluna nos metadados de resultados descreve o tipo e a nulidade da coluna no formato mostrado na tabela seguinte. Se a primeira afirmação não existir para todos os caminhos de controlo, é devolvido um conjunto de resultados com zero linhas.

Nome da coluna Tipo de dados Description
is_hidden bit Especifica que a coluna é uma coluna extra adicionada para fins de navegação e informação que não aparece realmente no conjunto de resultados.
column_ordinal int Contém a posição ordinal da coluna no conjunto de resultados. A posição da primeira coluna será especificada como 1.
name sysname Contém o nome da coluna, caso seja possível determinar um nome. Se não, conterá NULL.
is_nullable bit Contém os seguintes valores:

Valor 1 se a coluna permitir NULLs.

Valor 0 se a coluna não permitir NULLs.

Valor 1 se não for possível determinar que a coluna permite NULLs.
system_type_id int Contém a system_type_id do tipo de dados da coluna conforme especificado em sys.types. Para tipos CLR, mesmo que a coluna system_type_name devolva NULL, esta coluna devolverá o valor 240.
system_type_name Nvarchar(256) Contém o nome e os argumentos (como comprimento, precisão, escala), especificados para o tipo de dado da coluna.

Se o tipo de dado for um tipo de alias definido pelo utilizador, o tipo de sistema subjacente é especificado aqui.

Se o tipo de dado for um tipo CLR definido pelo utilizador, NULL é devolvido nesta coluna.
max_length smallint Comprimento máximo (em bytes) da coluna.

-1 = O tipo de dados da coluna é varchar(max), nvarchar(max), varbinary(max) ou xml.

Para colunas de texto , o valor max_length será 16 ou o valor definido por sp_tableoption 'texto na linha'.
precisão tinyint A precisão da coluna se for baseada em números. Caso contrário, devolve 0.
scale tinyint Escala da coluna se baseada em números. Caso contrário, devolve 0.
collation_name sysname Nome da coluna da coluna se for baseada em caracteres. Caso contrário, devolve NULL.
user_type_id int Para CLR e tipos de alias, contém a user_type_id do tipo de dados da coluna conforme especificado em sys.types. Caso contrário, é NULO.
user_type_database sysname Para CLR e tipos de alias, contém o nome da base de dados onde o tipo está definido. Caso contrário, é NULO.
user_type_schema sysname Para tipos CLR e alias, contém o nome do esquema em que o tipo está definido. Caso contrário, é NULO.
user_type_name sysname Para CLR e tipos de alias, contém o nome do tipo. Caso contrário, é NULO.
assembly_qualified_type_name Nvarchar(4000) Para tipos CLR, devolve o nome da assembly e da classe que define o tipo. Caso contrário, é NULO.
xml_collection_id int Contém a xml_collection_id do tipo de dados da coluna conforme especificado em sys.columns. Esta coluna devolve NULL se o tipo devolvido não estiver associado a uma coleção de esquema XML.
xml_collection_database sysname Contém a base de dados onde está definida a coleção de esquemas XML associada a este tipo. Esta coluna devolve NULL se o tipo devolvido não estiver associado a uma coleção de esquema XML.
xml_collection_schema sysname Contém o esquema em que a coleção de esquemas XML associada a este tipo está definida. Esta coluna devolve NULL se o tipo devolvido não estiver associado a uma coleção de esquema XML.
xml_collection_name sysname Contém o nome da coleção de esquemas XML associada a este tipo. Esta coluna devolve NULL se o tipo devolvido não estiver associado a uma coleção de esquema XML.
is_xml_document bit Retorna 1 se o tipo de dado devolvido for XML e esse tipo for garantido como um documento XML completo (incluindo um nó raiz), em vez de um fragmento XML). Caso contrário, devolve 0.
is_case_sensitive bit Retorna 1 se a coluna for de um tipo de cadeia com sensibilidade a maiúsculas minúsculas. Devolve 0 se não estiver.
is_fixed_length_clr_type bit Retorna 1 se a coluna for do tipo CLR de comprimento fixo. Devolve 0 se não estiver.
source_server sysname Nome do servidor de origem (se for originado de um servidor remoto). O nome é dado tal como aparece em sys.servers. Devolve NULL se a coluna tiver origem no servidor local ou se não for possível determinar em que servidor se origina. Só é preenchido se forem solicitadas informações de navegação.
source_database sysname O nome da base de dados originária é devolvido pela coluna deste resultado. Devolve NULL se a base de dados não puder ser determinada. Só é preenchido se forem solicitadas informações de navegação.
source_schema sysname Nome do esquema originário devolvido pela coluna neste resultado. Devolve NULL se o esquema não puder ser determinado. Só é preenchido se forem solicitadas informações de navegação.
source_table sysname O nome da tabela de origem é devolvido pela coluna deste resultado. Retorna NULL se a tabela não puder ser determinada. Só é preenchido se forem solicitadas informações de navegação.
source_column sysname O nome da coluna de origem é devolvido pela coluna do resultado. Retorna NULL se a coluna não puder ser determinada. Só é preenchido se forem solicitadas informações de navegação.
is_identity_column bit Devolve 1 se a coluna for uma coluna identidade e 0 se não. Retorna NULL se não for possível determinar que a coluna é uma coluna identidade.
is_part_of_unique_key bit Retorna 1 se a coluna fizer parte de um índice único (incluindo restrições únicas e primárias) e 0 se não fizer. Devolve NULL se não for possível determinar que a coluna faz parte de um índice único. Só é preenchido se forem solicitadas informações de navegação.
is_updateable bit Retorna 1 se a coluna for atualizável e 0 se não for possível. Retorna NULL se não for possível determinar que a coluna é atualizável.
is_computed_column bit Devolve 1 se a coluna for uma coluna calculada e 0 se não for. Devolve NULL se não puder ser determinado se a coluna é uma coluna calculada.
is_sparse_column_set bit Devolve 1 se a coluna for esparsa e 0 se não. Retorna NULL se não se puder determinar que a coluna faz parte de um conjunto de colunas esparsas.
ordinal_in_order_by_list smallint A posição desta coluna está por ORDEM POR lista. Devolve NULL se a coluna não aparecer na lista ORDER BY, ou se a lista ORDER BY não puder ser determinada de forma única.
order_by_list_length smallint O comprimento da lista ORDER BY. NULL é devolvido se não existir uma lista ORDER BY ou se a lista ORDER BY não puder ser determinada de forma única. Note que este valor será o mesmo para todas as linhas devolvidas por sp_describe_first_result_set.
order_by_is_descending smallint NULL Se o ordinal_in_order_by_list não for NULL, a coluna order_by_is_descending reporta a direção da cláusula ORDER BY para esta coluna. Caso contrário, reporta NULL.
error_number int Contém o número de erro devolvido pela função. Se não ocorrer erro, a coluna conterá NULL.
error_severity int Contém a gravidade devolvida pela função. Se não ocorrer erro, a coluna conterá NULL.
error_state int Contém a mensagem de estado. devolvido pela função. Se não ocorrer erro, a coluna conterá NULL.
error_message nvarchar(4096) Contém a mensagem devolvida pela função. Se não ocorrer erro, a coluna conterá NULL.
error_type int Contém um inteiro que representa o erro que está a ser devolvido. Mapas para error_type_desc. Veja a lista em observações.
error_type_desc nvarchar(60) Contém uma curta cadeia maiúscula que representa o erro devolvido. Mapas para error_type. Veja a lista em observações.

Observações

Esta função utiliza o mesmo algoritmo que sp_describe_first_result_set. Para mais informações, consulte sp_describe_first_result_set (Transact-SQL).

A tabela seguinte lista os tipos de erro e as suas descrições

error_type error_type Description
1 MISC Todos os erros que não são descritos de outra forma.
2 SINTAXE Ocorreu um erro de sintaxe no lote.
3 CONFLICTING_RESULTS O resultado não pôde ser determinado devido a um conflito entre duas possíveis primeiras afirmações.
4 DYNAMIC_SQL O resultado não pôde ser determinado devido ao SQL dinâmico que poderia potencialmente devolver o primeiro resultado.
5 CLR_PROCEDURE O resultado não podia ser determinado porque um procedimento armazenado CLR poderia potencialmente devolver o primeiro resultado.
6 CLR_TRIGGER O resultado não pôde ser determinado porque um gatilho CLR poderia potencialmente devolver o primeiro resultado.
7 EXTENDED_PROCEDURE O resultado não podia ser determinado porque um procedimento armazenado prolongado poderia potencialmente devolver o primeiro resultado.
8 UNDECLARED_PARAMETER O resultado não pôde ser determinado porque o tipo de dados de uma ou mais colunas do conjunto de resultados depende potencialmente de um parâmetro não declarado.
9 RECURSÃO O resultado não pôde ser determinado porque o lote contém uma afirmação recursiva.
10 TEMPORARY_TABLE O resultado não pôde ser determinado porque o lote contém uma tabela temporária e não é suportado por sp_describe_first_result_set .
11 UNSUPPORTED_STATEMENT O resultado não pôde ser determinado porque o lote contém uma instrução que não é suportada por sp_describe_first_result_set (por exemplo, FETCH, REVERT, etc.).
12 OBJECT_TYPE_NOT_SUPPORTED A @object_id passada à função não é suportada (ou seja, não é um procedimento armazenado)
13 OBJECT_DOES_NOT_EXIST O @object_id passado para a função não foi encontrado no catálogo do sistema.

Permissions

Requer permissão para executar o argumento @tsql.

Examples

Exemplos adicionais no tópico sp_describe_first_result_set (Transact-SQL) podem ser adaptados para usar sys.dm_exec_describe_first_result_set.

A. Retorno de informação sobre uma única declaração Transact-SQL

O código seguinte devolve informações sobre os resultados de uma declaração Transact-SQL.

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

B. Devolver informações sobre um procedimento

O exemplo seguinte cria um procedimento armazenado chamado pr_TestProc que devolve dois conjuntos de resultados. Depois, o exemplo demonstra que sys.dm_exec_describe_first_result_set devolve informação sobre o primeiro conjunto de resultados no procedimento.

USE AdventureWorks2022;  
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. Devolver metadados de um lote que contém múltiplas instruções

O exemplo seguinte avalia um lote que contém duas instruções Transact-SQL. O conjunto de resultados descreve o primeiro conjunto de resultados devolvido.

USE AdventureWorks2022;  
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;  
GO  

Ver também

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