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 devolve os metadados do primeiro conjunto de resultados da instrução.

sys.dm_exec_describe_first_result_set devolve a mesma definição de conjunto de resultados que sys.dm_exec_describe_first_result_set_for_object e é semelhante ao sp_describe_first_result_set.

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. O @tsql lote pode ser nvarchar(n) ou nvarchar(max).

@params

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

Uma única cadeia que contém as definições de todos os parâmetros incorporados no lote @tsql . 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 será necessário. NULL é o valor padrão para esse parâmetro.

@include_browse_information

Se definida como 1, cada consulta é analisada como se tivesse uma FOR BROWSE opção na consulta. O resultado inclui colunas-chave extra e informação sobre tabelas de origem.

Tabela retornada

A função devolve estes metadados comuns como conjunto de resultados. Cada linha corresponde a uma coluna nos metadados dos resultados e descreve o tipo e a nulidade da coluna no formato mostrado na tabela seguinte. Se a primeira instrução não existir para todos os caminhos de controlo, a função devolve 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 na verdade não aparece 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 é especificada como 1.
name sysname Contém o nome da coluna, caso seja possível determinar um nome. Se não, é NULL.
is_nullable bit Contém os seguintes valores:

Retorna 1 se a coluna permitir NULL valores.

Retorna 0 se a coluna não permitir NULL valores.

Retorna 1 se não for possível determinar que a coluna permite NULL valores.
system_type_id int Contém o system_type_id do tipo de dados da coluna conforme especificado em sys.types. Para tipos CLR, mesmo que a system_type_name coluna devolva NULL, esta coluna devolve 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 max_length valor é 16, ou o valor definido por sp_tableoption 'text in row'.
precision tinyint A precisão da coluna se for baseada em números. Caso contrário, retorna 0.
scale tinyint Escala da coluna se baseada em números. Caso contrário, retorna 0.
collation_name sysname Nome da coluna da coluna se for baseada em caracteres. Caso contrário, retorna NULL.
user_type_id int Para CLR e tipos de alias, contém o user_type_id do tipo de dados da coluna conforme especificado em sys.types. Caso contrário, é NULL.
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, é NULL.
user_type_schema sysname Para tipos CLR e alias, contém o nome do esquema em que o tipo está definido. Caso contrário, é NULL.
user_type_name sysname Para CLR e tipos de alias, contém o nome do tipo. Caso contrário, é NULL.
assembly_qualified_type_name Nvarchar(4000) Para tipos CLR, devolve o nome da assembly e da classe que define o tipo. Caso contrário, é NULL.
xml_collection_id int Contém a xml_collection_id do tipo de dados da coluna, conforme especificado em sys.columns. Esta coluna retorna NULL se o tipo devolvido não estiver associado a uma coleção de esquemas 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 retorna NULL se o tipo devolvido não estiver associado a uma coleção de esquemas 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 retorna NULL se o tipo devolvido não estiver associado a uma coleção de esquemas XML.
xml_collection_name sysname Contém o nome da coleção de esquemas XML associada a este tipo. Esta coluna retorna NULL se o tipo devolvido não estiver associado a uma coleção de esquemas 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, retorna 0.
is_case_sensitive bit Retorna 1 se a coluna for de um tipo de cadeia sensível 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 como aparece em sys.servers. Retorna NULL se a coluna se origina no servidor local ou se não é possível determinar em qual servidor ela 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. Retorna NULL se o banco de dados não puder ser determinado. Só é preenchido se forem solicitadas informações de navegação.
source_schema sysname Nome do esquema originário devolvido pela coluna neste resultado. Retorna 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 Retorna 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 de 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. Retorna NULL se não for possível determinar que a coluna faz parte de um índice exclusivo. 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. Retorna NULL se não for possível determinar que a coluna é atualizável.
is_computed_column bit Retorna 1 se a coluna for uma coluna calculada e 0 se não. Retorna NULL se não puder ser determinado se a coluna é uma coluna computada.
is_sparse_column_set bit Retorna 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á na ORDER BY lista. Retorna NULL se a coluna não aparecer na ORDER BY lista, ou se a ORDER BY lista não puder ser determinada de forma única.
order_by_list_length smallint O tamanho da ORDER BY lista. NULL é devolvida se não ORDER BY houver lista ou se a ORDER BY lista não puder ser determinada de forma única. Esse valor é o mesmo para todas as linhas retornadas por sp_describe_first_result_set.
order_by_is_descending smallint Se o ordinal_in_order_by_list não estiver NULL, a coluna order_by_is_descending informa a direção da cláusula ORDER BY para esta coluna. Caso contrário, informa NULL.
error_number int Contém o número de erro devolvido pela função. Se não ocorrer erro, a coluna contém NULL.
error_severity int Contém a gravidade devolvida pela função. Se não ocorrer erro, a coluna contém NULL.
error_state int Contém a mensagem de estado devolvida pela função. Se não ocorrer erro, a coluna contém NULL.
error_message nvarchar(4096) Contém a mensagem devolvida pela função. Se não ocorrer erro, a coluna contém NULL.
error_type int Contém um inteiro que representa o erro que está a ser devolvido. Mapeia 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. Mapeia 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.

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

error_type error_type Description
1 MISC Todos erros que não são descritos de outra forma.
2 SYNTAX 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 pôde 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 pôde 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 RECURSION O resultado não pôde ser determinado porque o lote contém uma instruçã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 O @object_id passado para a função não é suportado (ou seja, não é um procedimento armazenado).
13 OBJECT_DOES_NOT_EXIST O @object_id passado para a função não aparece no catálogo do sistema.

Permissions

Requer permissão para executar o argumento @tsql .

Examples

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

Pode adaptar os exemplos do artigo sp_describe_first_result_set para usar sys.dm_exec_describe_first_result_set.

A. Informação de devoluçã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 @AdventureWorks2025;

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

B. Informação de devolução 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 @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. 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 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;