Condividi tramite


sys.dm_exec_describe_first_result_set (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureDatabase SQL in Microsoft Fabric

Questa funzione di gestione dinamica prende una Transact-SQL istruzione come parametro e restituisce i metadati per il primo insieme di risultati dell'istruzione.

sys.dm_exec_describe_first_result_set restituisce la stessa definizione dell'insieme di risultati di sys.dm_exec_describe_first_result_set_for_object ed è simile a sp_describe_first_result_set.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

@tsql

Una o più istruzioni Transact-SQL. Il @tsql lotto può essere nvarchar(n) o nvarchar(max).

@params

@params fornisce una stringa di dichiarazione per i parametri del batch Transact-SQL, simile a sp_executesql. I parametri possono essere nvarchar(n) o nvarchar(max).

Una singola stringa che contiene le definizioni di tutti i parametri incorporati nel @tsql batch. La stringa deve essere una costante o una variabile Unicode. Ogni definizione di parametro è costituita da un nome del parametro e da un tipo di dati. n è un segnaposto che indica definizioni di parametro aggiuntive. Ogni parametro specificato in stmt deve essere definito in @params. Se l'istruzione Transact-SQL o il batch nell'istruzione non contiene parametri, @params non è necessario. NULL è il valore predefinito per questo parametro.

@include_browse_information

Se impostata su 1, ogni query viene analizzata come se avesse un'opzione FOR BROWSE sulla query. Il risultato include colonne chiave aggiuntive e informazioni sulle tabelle sorgente.

Tabella restituita

La funzione restituisce questi metadati comuni come insieme di risultati. Ogni riga corrisponde a una colonna nei metadati dei risultati e descrive il tipo e la nullabilità della colonna nel formato mostrato nella tabella seguente. Se la prima istruzione non esiste per ogni percorso di controllo, la funzione restituisce un insieme di risultati con zero righe.

Nome colonna Tipo di dati Descrizione
is_hidden bit Specifica che la colonna è una colonna extra, aggiunta per scopi di navigazione e informativi, che in realtà non appare nel set di risultati.
column_ordinal int Contiene la posizione ordinale della colonna nel set di risultati. La posizione della prima colonna è specificata come 1.
name sysname Contiene il nome della colonna se è possibile determinare un nome. Se no, è NULL.
is_nullable bit Contiene i valori seguenti:

Restituisce 1 se la colonna permette NULL i valori.

Restituisce 0 se la colonna non permette NULL valori.

Restituisce 1 se non si può determinare che la colonna consente NULL valori.
system_type_id int Contiene il system_type_id del tipo di dato colonna come specificato in sys.types. Per i tipi CLR, anche se la system_type_name colonna restituisce NULL, questa colonna restituisce 240.
system_type_name nvarchar(256) Contiene il nome e gli argomenti, ad esempio lunghezza, precisione e scala, specificati per il tipo di dati della colonna.

Se il tipo di dati è un tipo di alias definito dall'utente, il tipo di sistema sottostante viene specificato qui.

Se il tipo di dato è un tipo CLR definito dall'utente, NULL viene restituito in questa colonna.
max_length smallint Lunghezza massima in byte della colonna.

-1 = Il tipo di dati della colonna è varchar(max), nvarchar(max), varbinary(max)o xml.

Per le colonne di testo , il max_length valore è 16, oppure il valore imposto da sp_tableoption 'text in row'.
precision tinyint Precisione della colonna se basata su valori numerici. In caso contrario restituisce 0.
scale tinyint Scala della colonna se basata su valori numerici. In caso contrario restituisce 0.
collation_name sysname Nome delle regole di confronto della colonna se basata su caratteri. In caso contrario restituisce NULL.
user_type_id int Per i tipi CLR e alias, contiene l'oggetto user_type_id del tipo di dati della colonna come specificato in sys.types. In caso contrario, è NULL.
user_type_database sysname Per i tipi di alias e CLR, contiene il nome del database in cui è definito il tipo. In caso contrario, è NULL.
user_type_schema sysname Per i tipi di alias e CLR, contiene il nome dello schema in cui è definito il tipo. In caso contrario, è NULL.
user_type_name sysname Per i tipi di alias e CLR, contiene il nome del tipo. In caso contrario, è NULL.
assembly_qualified_type_name nvarchar(4000) Per i tipi CLR, restituisce il nome dell'assembly e la classe che definisce il tipo. In caso contrario, è NULL.
xml_collection_id int Contiene l'oggetto xml_collection_id del tipo di dati della colonna come specificato in sys.columns. Questa colonna restituisce NULL se il tipo restituito non è associato a una raccolta di XML Schema.
xml_collection_database sysname Contiene il database in cui viene definita la raccolta XML Schema associata a questo tipo. Questa colonna restituisce NULL se il tipo restituito non è associato a una raccolta di XML Schema.
xml_collection_schema sysname Contiene lo schema in cui viene definita la raccolta XML Schema associata a questo tipo. Questa colonna restituisce NULL se il tipo restituito non è associato a una raccolta di XML Schema.
xml_collection_name sysname Contiene il nome della raccolta XML Schema associata a questo tipo. Questa colonna restituisce NULL se il tipo restituito non è associato a una raccolta di XML Schema.
is_xml_document bit Ritorna 1 se il tipo di dato restituito è XML e quel tipo è garantito come un documento XML completo (incluso un nodo radice, invece che un frammento XML). In caso contrario restituisce 0.
is_case_sensitive bit Ritorna 1 se la colonna è di tipo stringa a maiuscole e minuscole (SEC). Restituisci 0 se non lo è.
is_fixed_length_clr_type bit Ritorna 1 se la colonna è di tipo CLR a lunghezza fissa. Restituisci 0 se non lo è.
source_server sysname Nome del server di origine (se ha origine in un server remoto). Il nome viene assegnato come appare in sys.servers. Restituisce NULL se la colonna ha origine nel server locale o se non è possibile determinare il server in cui ha origine. Viene popolata solo se sono richieste informazioni di esplorazione.
source_database sysname Nome del database di origine restituito dalla colonna in questo risultato. Restituisce NULL se non è possibile determinare il database. Viene popolata solo se sono richieste informazioni di esplorazione.
source_schema sysname Nome dello schema di origine restituito dalla colonna in questo risultato. Restituisce NULL se non è possibile determinare lo schema. Viene popolata solo se sono richieste informazioni di esplorazione.
source_table sysname Nome della tabella di origine restituita dalla colonna in questo risultato. Restituisce NULL se la tabella non può essere determinata. Viene popolata solo se sono richieste informazioni di esplorazione.
source_column sysname Nome della colonna di origine restituita dalla colonna del risultato. Restituisce NULL se la colonna non può essere determinata. Viene popolata solo se sono richieste informazioni di esplorazione.
is_identity_column bit Restituisce 1 se la colonna è una colonna identità e 0 se no. Restituisce NULL se non è possibile determinare che la colonna è una colonna Identity.
is_part_of_unique_key bit Restituisce 1 se la colonna fa parte di un indice unico (inclusi vincoli unici e primari) e 0 se non lo è. Restituisce NULL se non è possibile determinare che la colonna fa parte di un indice univoco. Viene popolata solo se sono richieste informazioni di esplorazione.
is_updateable bit Restituisce 1 se la colonna è aggiornabile e 0 se no. Restituisce NULL se non è possibile determinare che la colonna è aggiornabile.
is_computed_column bit Restituisce 1 se la colonna è una colonna calcolata e 0 se no. Restituisce NULL se non si può determinare se la colonna è una colonna calcolata.
is_sparse_column_set bit Restituisce 1 se la colonna è sparsa e 0 se non è così. Ritorna NULL se non si può determinare che la colonna fa parte di un insieme di colonne sparse.
ordinal_in_order_by_list smallint La posizione di questa colonna è in ORDER BY lista. Ritorna NULL se la colonna non appare nella ORDER BY lista, o se la ORDER BY lista non può essere determinata in modo univoco.
order_by_list_length smallint La lunghezza della ORDER BY lista. NULL viene restituito se non ORDER BY c'è una lista o se la ORDER BY lista non può essere determinata in modo univoco. Questo valore è lo stesso per tutte le righe restituite da sp_describe_first_result_set.
order_by_is_descending smallint ordinal_in_order_by_list Se non NULLè , la order_by_is_descending colonna indica la direzione della ORDER BY clausola per questa colonna. In caso contrario, segnala NULL.
error_number int Contiene il numero dell'errore restituito dalla funzione. Se non si è verificato alcun errore, la colonna contiene NULL.
error_severity int Contiene la gravità restituita dalla funzione. Se non si è verificato alcun errore, la colonna contiene NULL.
error_state int Contiene il messaggio sullo stato attuale restituito dalla funzione. Se non si è verificato alcun errore, la colonna contiene NULL.
error_message nvarchar(4096) Contiene il messaggio restituito dalla funzione. Se non si è verificato alcun errore, la colonna contiene NULL.
error_type int Contiene un numero intero che rappresenta l'errore restituito. Esegue il mapping a error_type_desc. Vedere l'elenco nelle osservazioni.
error_type_desc nvarchar(60) Contiene una breve stringa in caratteri maiuscoli che rappresenta l'errore restituito. Esegue il mapping a error_type. Vedere l'elenco nelle osservazioni.

Osservazioni:

Questa funzione utilizza lo stesso algoritmo di sp_describe_first_result_set. Per maggiori informazioni, vedi sp_describe_first_result_set.

La tabella seguente elenca i tipi di errore e le loro descrizioni.

error_type error_type Descrizione
1 MISC Tutti errori che non sono altrimenti descritti.
2 SYNTAX Errore di sintassi nel batch.
3 CONFLICTING_RESULTS Il risultato non poteva essere determinato a causa di un conflitto tra due possibili prime affermazioni.
4 DYNAMIC_SQL Il risultato non poteva essere determinato a causa di SQL dinamico che poteva potenzialmente restituire il primo risultato.
5 CLR_PROCEDURE Il risultato non poteva essere determinato perché una procedura memorizzata CLR poteva potenzialmente restituire il primo risultato.
6 CLR_TRIGGER Il risultato non poteva essere determinato perché un trigger CLR poteva potenzialmente restituire il primo risultato.
7 EXTENDED_PROCEDURE Il risultato non poteva essere determinato perché una procedura di memoria estesa avrebbe potuto potenzialmente restituire il primo risultato.
8 UNDECLARED_PARAMETER Il risultato non poteva essere determinato perché il tipo di dato di una o più colonne dell'insieme di risultati dipende potenzialmente da un parametro non dichiarato.
9 RECURSION Il risultato non poteva essere determinato perché il lotto contiene un'istruzione ricorsiva.
10 TEMPORARY_TABLE Il risultato non è stato determinato perché il batch contiene una tabella temporanea e non è supportato da sp_describe_first_result_set .
11 UNSUPPORTED_STATEMENT Il risultato non poteva essere determinato perché il batch contiene un'istruzione non supportata da sp_describe_first_result_set (ad esempio, FETCH, REVERT, ecc.).
12 OBJECT_TYPE_NOT_SUPPORTED Il @object_id passato alla funzione non è supportato (cioè, non è una procedura memorizzata).
13 OBJECT_DOES_NOT_EXIST Il @object_id passaggio alla funzione non si trova nel catalogo di sistema.

Autorizzazioni

È necessaria l'autorizzazione per eseguire l'argomento @tsql .

Esempi

Gli esempi di codice in questo articolo usano il database di esempio AdventureWorks2025 o AdventureWorksDW2025, che è possibile scaricare dalla home page Microsoft SQL Server Samples and Community Projects.

Puoi adattare gli esempi nell'articolo di sp_describe_first_result_set per usare sys.dm_exec_describe_first_result_set.

R. Informazioni di restituzione su una singola Transact-SQL estratto conto

Il codice seguente restituisce informazioni sui risultati di un'istruzione 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. Informazioni di restituzione su una procedura

Il seguente esempio crea una stored procedure chiamata pr_TestProc che restituisce due set di risultati. Poi l'esempio dimostra che sys.dm_exec_describe_first_result_set restituisce informazioni sul primo insieme di risultati nella procedura.

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. Restituire metadati da un lotto che contiene più istruzioni

Nell'esempio seguente viene valutato un batch contenente due istruzioni Transact-SQL. Il set di risultati descrive il primo set di risultati restituito.

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;