dm_exec_describe_first_result_set_for_object per più set di risultati


9

Esiste una procedura per restituire metadati per tutti i set di risultati in una procedura memorizzata?

Qualcosa del genere sys.dm_exec_describe_first_result_set_for_object, ma per tutti i set di risultati?

Alla fine, vorrei scoprire i metadati per ogni set di risultati in ogni procedura memorizzata nel database. Per ora, mi accontenterei solo dei set di risultati che sys.dm_exec_describe_first_result_set_for_objectnon sono in grado di descrivere. Cioè, il 2 °, il 3 ° e l'ennesimo set di risultati.

Guardando usando SQLCLR per fare questo ora:

Come salvare i risultati di una procedura con più di un set di risultati
tSQLt - Test unità DB per SQL Server - ResultSetFilter.cs


3
No, non esiste nulla di simile in SQL Server, dovresti scrivere codice per farlo (e probabilmente dovresti fare ipotesi in molti casi).
Aaron Bertrand

Risposte:


3

Esiste una procedura per restituire metadati per tutti i set di risultati in una procedura memorizzata?

No e Sì.

No

Non esiste un mezzo T-SQL puro per accedere a più del primo set di risultati. Anche OPENROWSET e OPENQUERY hanno la stessa limitazione:

Sebbene la query possa restituire più set di risultati, OPEN (ROWSET | QUERY) restituisce solo il primo.

Per la cronaca, non sto né dicendo né sottintendendo che esiste una ragione tecnica comune per questa limitazione. Sto solo sottolineando che la limitazione non si limita a sp_describe_first_result_set, sys.dm_exec_describe_first_result_sete sys.dm_exec_describe_first_result_set_for_object.

L'unico modo per acquisire informazioni - metadati del set di risultati e persino i risultati - per i set di risultati 2 - n è tramite il codice dell'applicazione. Eseguire innanzitutto le query / le stored procedure utilizzando SqlCommand.ExecuteReader (CommandBehavior) con CommandBehavior di KeyInfo. Quindi, è possibile ottenere i metadati del set di risultati utilizzando il metodo SqlDataReader.GetSchemaTable e chiamando il file metodo SqlDataReader.NextResult per scorrere i set di risultati. Basta tenere a mente che mentre si fa questo tramite il codice applicazione non ha i limiti di non lavorare con SQL dinamico e tabelle temporanee, si faesegui effettivamente il codice SQL e se hai istruzioni DML e desideri solo i metadati del set di risultati senza causare alcuna modifica dei dati, dovrai racchiudere il codice SQL che stai testando in un BEGIN TRAN/ ROLLBACK TRAN.

Il tipo di applicazione può essere un'app Windows normale, un'app console, un'app Web, ecc. Oppure può anche essere una funzione SQLCLR / procedura memorizzata.

Riguardo a ciò tramite SQLCLR, esiste già una procedura memorizzata che fa ciò che è descritto qui. Si chiama DB_DescribeResultSets e fa parte della libreria SQL # (di cui sono l'autore, e mentre esiste una versione gratuita, DB_DescribeResultSets è disponibile solo nella versione completa).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.