Compartilhar via


sys.dm_exec_describe_first_result_set (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

Essa função de gerenciamento dinâmico toma uma instrução Transact-SQL como parâmetro e retorna os metadados do primeiro conjunto de resultados da instrução.

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

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

@tsql

Uma ou mais instruções Transact-SQL. O @tsql lote pode ser nvarchar(n) ou nvarchar(max).

@params

@params fornece uma string 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 string 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âmetro adicionais. Todo parâmetro especificado em stmt deve ser definido em @params. Se a instrução Transact-SQL ou o 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 adicionais de chave e informações da tabela de fonte.

Tabela retornada

A função retorna esses metadados comuns como um conjunto de resultados. Cada linha corresponde a uma coluna nos metadados de resultados e descreve o tipo e a nulidade da coluna no formato mostrado na tabela a seguir. Se a primeira instrução não existir para todo caminho de controle, a função retorna um conjunto de resultados com zero linhas.

Nome da coluna Tipo de dados Descrição
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 Conterá o nome da coluna se um nome puder ser determinado. 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 dado da coluna conforme especificado em sys.types. Para tipos CLR, mesmo que a system_type_name coluna retorne NULL, essa coluna retorna 240.
system_type_name nvarchar(256) Contém o nome e argumentos (como comprimento, precisão, escala), especificados para o tipo de dados da coluna.

Se o tipo de dados for um tipo de alias definido pelo usuário, o tipo de sistema subjacente será especificado aqui.

Se o tipo de dado for um tipo CLR definido pelo usuário, NULL é retornado 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 Precisão da coluna, se tiver base numérica. Caso contrário, retornará 0.
scale tinyint Escala da coluna, se tiver base numérica. Caso contrário, retornará 0.
collation_name sysname Nome da ordenação da coluna, se baseada em caracteres. Caso contrário, retornará NULL.
user_type_id int Para tipos CLR e alias, contém o user_type_id tipo de dados da coluna, conforme especificado em sys.types. Caso contrário, é NULL.
user_type_database sysname Para tipos de CLR e de alias, contém o nome do banco de dados no qual o tipo é definido. Caso contrário, é NULL.
user_type_schema sysname Para tipos de CLR e de alias, contém o nome do esquema no qual o tipo é definido. Caso contrário, é NULL.
user_type_name sysname Para tipos de CLR e de alias, contém o nome do tipo. Caso contrário, é NULL.
assembly_qualified_type_name nvarchar(4000) Para tipos de CLR, retorna o nome do assembly e da classe que define o tipo. Caso contrário, é NULL.
xml_collection_id int Contém o xml_collection_id tipo de dados da coluna, conforme especificado em sys.columns. Essa coluna retornará NULL se o tipo retornado não estiver associado a uma coleção de esquemas XML.
xml_collection_database sysname Contém o banco de dados no qual a coleção de esquemas XML associada a esse tipo está definida. Essa coluna retornará NULL se o tipo retornado não estiver associado a uma coleção de esquemas XML.
xml_collection_schema sysname Contém o esquema no qual a coleção de esquemas XML associada a esse tipo está definida. Essa coluna retornará NULL se o tipo retornado 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 esse tipo. Essa coluna retornará NULL se o tipo retornado não estiver associado a uma coleção de esquemas XML.
is_xml_document bit Retorna 1 se o tipo de dado retornado 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, retornará 0.
is_case_sensitive bit Retorna 1 se a coluna for do tipo string sensível a maiúsculas e maiú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 for originada no servidor local ou se não for possível determinar em qual servidor ela se origina. Será populado somente se informações de navegação forem solicitadas.
source_database sysname Nome do banco de dados de origem retornado pela coluna neste resultado. Retorna NULL se o banco de dados não puder ser determinado. Será populado somente se informações de navegação forem solicitadas.
source_schema sysname Nome do esquema de origem retornado pela coluna neste resultado. Retorna NULL se o esquema não puder ser determinado. Será populado somente se informações de navegação forem solicitadas.
source_table sysname Nome da tabela de origem retornado pela coluna neste resultado. Retorna NULL se a tabela não puder ser determinada. Será populado somente se informações de navegação forem solicitadas.
source_column sysname Nome da coluna de origem retornado pela coluna de resultado. Retorna NULL se a coluna não puder ser determinada. Será populado somente se informações de navegação forem solicitadas.
is_identity_column bit Retorna 1 se a coluna for uma coluna identidade e 0 se não for. 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 faz parte de um índice único (incluindo restrições únicas e primárias) e 0 se não for. Retorna NULL se não for possível determinar que a coluna faz parte de um índice exclusivo. Será populado somente se informações de navegação forem solicitadas.
is_updateable bit Retorna 1 se a coluna for atualizável e 0 se não for assim. 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 for possível 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 não ordinal_in_order_by_list for NULL, a coluna informará order_by_is_descending a ORDER BY direção da cláusula para essa coluna. Caso contrário, ele relata NULL.
error_number int Contém o número do erro retornado pela função. Se não ocorreu erro, a coluna contém NULL.
error_severity int Contém a severidade do erro retornado pela função. Se não ocorreu erro, a coluna contém NULL.
error_state int Contém a mensagem de estado retornada pela função. Se não ocorreu erro, a coluna contém NULL.
error_message nvarchar(4096) Contém a mensagem retornada pela função. Se não ocorreu erro, a coluna contém NULL.
error_type int Contém um inteiro que representa o erro que é retornado. Mapeia para error_type_desc. Consulte a lista sob comentários.
error_type_desc nvarchar(60) Contém uma pequena cadeia de caracteres maiúsculos que representa o erro sendo retornado. Mapeia para error_type. Consulte a lista sob comentários.

Comentários

Essa função usa o mesmo algoritmo que sp_describe_first_result_set. Para mais informações, veja sp_describe_first_result_set.

A tabela a seguir lista os tipos de erro e suas descrições.

error_type error_type Descrição
1 MISC Todos erros que não são descritos de outra forma.
2 SYNTAX Um erro de sintaxe ocorreu 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 por causa do SQL dinâmico, que poderia potencialmente retornar o primeiro resultado.
5 CLR_PROCEDURE O resultado não pôde ser determinado porque um procedimento armazenado CLR poderia potencialmente retornar 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 estendido poderia potencialmente devolver o primeiro resultado.
8 UNDECLARED_PARAMETER O resultado não pôde ser determinado porque o tipo de dado de uma ou mais colunas do conjunto de resultados potencialmente depende 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.

Permissões

Requer permissão para executar o argumento @tsql .

Exemplos

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que você pode baixar na página inicial Microsoft SQL Server Samples and Community Projects.

Você pode adaptar os exemplos do artigo de sp_describe_first_result_set para usar sys.dm_exec_describe_first_result_set.

R. Informações de retorno sobre uma única declaração Transact-SQL

O código a seguir retorna informações sobre os resultados de uma instruçã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ções de retorno sobre um procedimento

O exemplo a seguir cria um procedimento armazenado chamado pr_TestProc que retorna dois conjuntos de resultados. Então, o exemplo demonstra que sys.dm_exec_describe_first_result_set retorna informações 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 a seguir avalia um lote que contém duas instruções Transact-SQL. O conjunto de resultados descreve o primeiro conjunto de resultados retornado.

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;