Teilen über


sys.dm_exec_describe_first_result_set (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Diese dynamische Managementfunktion nimmt eine Transact-SQL-Anweisung als Parameter und liefert die Metadaten für die erste Ergebnismenge der Anweisung zurück.

sys.dm_exec_describe_first_result_set gibt dieselbe Ergebnismengendefinition wie sys.dm_exec_describe_first_result_set_for_object zurück und ist ähnlich wie sp_describe_first_result_set.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

@tsql

Mindestens eine Transact-SQL-Anweisung. Die @tsql Charge kann nvarchar(n) oder nvarchar(max) sein.

@params

@params stellt eine Deklarationszeichenkette für Parameter für den Transact-SQL Batch bereit, ähnlich wie sp_executesql. Die Parameter können nvarchar(n) oder nvarchar(max) sein.

Eine einzelne Zeichenkette, die die Definitionen aller Parameter enthält, die im @tsql Batch eingebettet sind. Die Zeichenfolge muss eine Unicode-Konstante oder eine Unicode-Variable sein. Jede Parameterdefinition besteht aus einem Parameternamen und einem Datentyp. n ist ein Platzhalter für zusätzlicher Parameterdefinitionen. Jeder in stmt angegebene Parameter muss in @params definiert sein. Wenn die Transact-SQL-Anweisung oder der Batch in der Anweisung keine Parameter enthält, ist @params nicht erforderlich. NULL ist der Standardwert für diesen Parameter.

@include_browse_information

Wenn auf 1 gesetzt, wird jede Abfrage so analysiert, als hätte sie eine FOR BROWSE Option für die Abfrage. Das Ergebnis enthält zusätzliche Schlüsselspalten und Quelltabelleninformationen.

Zurückgegebene Tabelle

Die Funktion liefert diese gemeinsamen Metadaten als Ergebnisset zurück. Jede Zeile entspricht einer Spalte in den Ergebnismetadaten und beschreibt den Typ und die Nullfähigkeit der Spalte im im folgenden Tabellenformat. Wenn die erste Anweisung für jeden Steuerpfad nicht existiert, liefert die Funktion eine Ergebnismenge mit null Zeilen.

Spaltenname Datentyp BESCHREIBUNG
is_hidden bit Es gibt an, dass die Spalte eine zusätzliche Spalte ist, die zum Durchblättern und Informationszwecken hinzugefügt wird und im Ergebnisset tatsächlich nicht erscheint.
column_ordinal int Enthält die Ordnungsposition der Spalte im Resultset. Die Position der ersten Spalte wird als 1angegeben.
name sysname Enthält den Namen der Spalte, wenn ein Name bestimmt werden kann. Wenn nicht, dann ist NULLes .
is_nullable bit Enthält die folgenden Werte:

Gibt zurück, 1 wenn die Spalte Werte zulässt NULL .

Gibt zurück, 0 wenn die Spalte keine Werte erlaubt NULL .

Es gibt zurück, 1 wenn nicht festgestellt werden kann, dass die Spalte Werte zulässt NULL .
system_type_id int Enthält den system_type_id Spaltendatentyp, wie in sys.typesangegeben. Für CLR-Typen gibt diese Spalte, obwohl die Spalte system_type_name , NULL, zurück.240
system_type_name nvarchar(256) Enthält den Namen und die Argumente (z. B. Länge, Genauigkeit oder Skala), die für den Datentyp der Spalte angegeben wurden.

Wenn es sich bei dem Datentyp um einen benutzerdefinierten Aliastyp handelt, wird hier der zugrunde liegende Systemtyp angegeben.

Wenn der Datentyp ein benutzerdefinierter CLR-Typ ist, NULL wird in dieser Spalte zurückgegeben.
max_length smallint Maximale Länge (in Byte) für die Spalte.

-1 = Spaltendatentyp ist varchar(max), nvarchar(max), varbinary(max) oder xml.

Für Textspalten ist 16der max_length Wert , oder der durch gesetzte sp_tableoption 'text in row'Wert .
precision tinyint Die Genauigkeit der Spalte, wenn sie auf numerischen Werten basiert. Andernfalls wird 0 zurückgegeben.
scale tinyint Die Skalierung der Spalte, wenn sie auf numerischen Werten basiert. Andernfalls wird 0 zurückgegeben.
collation_name sysname Name der Sortierung der Spalte, wenn diese zeichenbasiert ist. Andernfalls wird NULL zurückgegeben.
user_type_id int Enthält für CLR- und Aliastypen den user_type_id Datentyp der Spalte, wie in sys.typesangegeben. Andernfalls lautet NULL.
user_type_database sysname Enthält bei CLR- und Aliastypen den Namen der Datenbank, in der der Typ definiert wurde. Andernfalls lautet NULL.
user_type_schema sysname Enthält bei CLR- und Aliastypen den Namen des Schemas, in dem der Typ definiert wurde. Andernfalls lautet NULL.
user_type_name sysname Enthält bei CLR- und Aliastypen den Namen des Typs. Andernfalls lautet NULL.
assembly_qualified_type_name nvarchar(4000) Gibt bei CLR-Typen den Namen der Assembly und der Klasse zurück, die den Typ definieren. Andernfalls lautet NULL.
xml_collection_id int Enthält den xml_collection_id Datentyp der Spalte gemäß der Angabe in sys.columns. Diese Spalte gibt zurück NULL , wenn der zurückgegebene Typ keiner XML-Schemaauflistung zugeordnet ist.
xml_collection_database sysname Enthält die Datenbank, in der die XML-Schemaauflistung definiert ist, die diesem Typ zugeordnet wurde. Diese Spalte gibt zurück NULL , wenn der zurückgegebene Typ keiner XML-Schemaauflistung zugeordnet ist.
xml_collection_schema sysname Enthält das Schema, in dem die XML-Schemaauflistung definiert ist, die diesem Typ zugeordnet wurde. Diese Spalte gibt zurück NULL , wenn der zurückgegebene Typ keiner XML-Schemaauflistung zugeordnet ist.
xml_collection_name sysname Enthält den Namen der XML-Schemaauflistung, die diesem Typ zugeordnet wurde. Diese Spalte gibt zurück NULL , wenn der zurückgegebene Typ keiner XML-Schemaauflistung zugeordnet ist.
is_xml_document bit Wird zurückgegeben 1 , wenn der zurückgegebene Datentyp XML ist und dieser Typ garantiert ein vollständiges XML-Dokument ist (einschließlich eines Root-Knotens im Gegensatz zu einem XML-Fragment). Andernfalls wird 0 zurückgegeben.
is_case_sensitive bit Gibt zurück, 1 wenn die Spalte einen groß- und kleinschreibungssensitiven String-Typ hat. Es gibt Rückgaben 0 , falls nicht.
is_fixed_length_clr_type bit Gibt zurück, wenn die Spalte einen CLR-Typ mit fester Länge 1 hat. Es gibt Rückgaben 0 , falls nicht.
source_server sysname Name des ursprünglichen Servers (bei Ursprung auf einem Remoteserver). Der Name wird angegeben, wie er in sys.servers. Gibt zurück NULL , ob die Spalte auf dem lokalen Server stammt oder nicht bestimmt werden kann, auf welchem Server sie stammt. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_database sysname Der Name der ursprünglichen Datenbank, die von der Spalte in diesem Ergebnis zurückgegeben wird. Gibt zurück NULL , wenn die Datenbank nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_schema sysname Der Name des ursprünglichen Schemas, das von der Spalte in diesem Ergebnis zurückgegeben wird. Gibt zurück NULL , wenn das Schema nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_table sysname Der Name der ursprünglichen Tabelle, die von der Spalte in diesem Ergebnis zurückgegeben wird. Gibt zurück NULL , wenn die Tabelle nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
source_column sysname Der Name der ursprünglichen Spalte, die von der Ergebnisspalte zurückgegeben wird. Gibt zurück NULL , wenn die Spalte nicht bestimmt werden kann. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
is_identity_column bit Gibt zurück, 1 wenn die Spalte eine Identitätsspalte ist, und 0, wenn nicht. Gibt zurück NULL , wenn sie nicht bestimmt werden kann, dass es sich bei der Spalte um eine Identitätsspalte handelt.
is_part_of_unique_key bit Gibt zurück, wenn die Spalte 1 Teil eines eindeutigen Index ist (einschließlich eindeutiger und primärer Einschränkungen) und 0, wenn sie es nicht ist. Gibt zurück NULL , wenn sie nicht bestimmt werden kann, dass die Spalte Teil eines eindeutigen Indexes ist. Wird nur aufgefüllt, wenn die Suche nach Informationen erforderlich ist.
is_updateable bit Gibt zurück, wenn die Spalte 1 aktualisierbar ist, und 0, wenn nicht. Gibt zurück NULL , wenn sie nicht bestimmt werden kann, dass die Spalte aktualisierbar ist.
is_computed_column bit Gibt zurück, 1 wenn die Spalte eine berechnete Spalte ist, und 0, wenn nicht. Es gibt zurück, NULL wenn nicht bestimmt werden kann, ob die Spalte eine berechnete Spalte ist.
is_sparse_column_set bit Gibt zurück, wenn die Spalte eine spärliche Spalte 1 ist, und 0, wenn nicht. Es gibt zurück, wenn nicht festgestellt werden kann, dass die Spalte Teil einer dünnen Spaltenmenge NULL ist.
ordinal_in_order_by_list smallint Die Position dieser Spalte ist in der ORDER BY Liste. Es wird zurückgegeben NULL , wenn die Spalte nicht in der ORDER BY Liste erscheint oder wenn die ORDER BY Liste nicht eindeutig bestimmt werden kann.
order_by_list_length smallint Die Länge der Liste ORDER BY . NULL wird zurückgegeben, wenn es keine ORDER BY Liste gibt oder wenn die ORDER BY Liste nicht eindeutig bestimmt werden kann. Dieser Wert ist für alle Zeilen identisch, die von sp_describe_first_result_set.
order_by_is_descending smallint Ist dies ordinal_in_order_by_list nicht NULLder Fall, meldet die order_by_is_descending Spalte die Richtung der ORDER BY Klausel für diese Spalte. Andernfalls wird berichtet NULL.
error_number int Enthält die von der Funktion zurückgegebene Fehlernummer. Wenn kein Fehler aufgetreten ist, enthält NULLdie Spalte .
error_severity int Enthält den von der Funktion zurückgegebenen Schweregrad. Wenn kein Fehler aufgetreten ist, enthält NULLdie Spalte .
error_state int Enthält die statusmeldung, die von der Funktion zurückgegeben wird. Wenn kein Fehler aufgetreten ist, enthält NULLdie Spalte .
error_message nvarchar(4096) Enthält die von der Funktion zurückgegebene Meldung. Wenn kein Fehler aufgetreten ist, enthält NULLdie Spalte .
error_type int Enthält eine ganze Zahl, die den zurückgegebenen Fehler darstellt. Wird error_type_desc zugeordnet. Siehe Liste unter Hinweisen.
error_type_desc nvarchar(60) Enthält eine kurze Zeichenfolge in Großbuchstaben, die den zurückgegebenen Fehler darstellt. Wird error_type zugeordnet. Siehe Liste unter Hinweisen.

Hinweise

Diese Funktion verwendet denselben Algorithmus wie sp_describe_first_result_set. Weitere Informationen finden Sie unter sp_describe_first_result_set.

Die folgende Tabelle listet die Fehlertypen und deren Beschreibungen auf.

error_type error_type BESCHREIBUNG
1 MISC Alles Fehler, die sonst nicht beschrieben sind.
2 SYNTAX Im Batch ist ein Syntaxfehler aufgetreten.
3 CONFLICTING_RESULTS Das Ergebnis konnte nicht festgestellt werden, da es einen Widerspruch zwischen zwei möglichen ersten Aussagen gab.
4 DYNAMIC_SQL Das Ergebnis konnte nicht bestimmt werden, da dynamisches SQL potenziell das erste Ergebnis zurückgeben konnte.
5 CLR_PROCEDURE Das Ergebnis konnte nicht bestimmt werden, da ein CLR-gespeichertes Verfahren potenziell das erste Ergebnis zurückgeben könnte.
6 CLR_TRIGGER Das Ergebnis konnte nicht bestimmt werden, da ein CLR-Trigger potenziell das erste Ergebnis zurückgeben könnte.
7 EXTENDED_PROCEDURE Das Ergebnis konnte nicht bestimmt werden, da ein erweitertes gespeichertes Verfahren potenziell das erste Ergebnis zurückgeben könnte.
8 UNDECLARED_PARAMETER Das Ergebnis konnte nicht bestimmt werden, da der Datentyp einer oder mehrerer Spalten der Ergebnismenge potenziell von einem nicht deklarierten Parameter abhängt.
9 RECURSION Das Ergebnis konnte nicht bestimmt werden, da der Batch eine rekursive Anweisung enthält.
10 TEMPORARY_TABLE Das Ergebnis konnte nicht bestimmt werden, da der Batch eine temporäre Tabelle enthält und nicht von sp_describe_first_result_set unterstützt wird.
11 UNSUPPORTED_STATEMENT Das Ergebnis konnte nicht bestimmt werden, weil der Batch eine Anweisung enthält, die von sp_describe_first_result_set (zum Beispiel FETCH, REVERT, usw.) nicht unterstützt wird.
12 OBJECT_TYPE_NOT_SUPPORTED Die an die Funktion übergegebene Funktion @object_id wird nicht unterstützt (das heißt, es handelt sich nicht um ein gespeichertes Verfahren).
13 OBJECT_DOES_NOT_EXIST Die an die Funktion übergebene Funktion @object_id findet man nicht im Systemkatalog.

Berechtigungen

Erfordert die Berechtigung zum Ausführen des @tsql Arguments.

Beispiele

Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.

Sie können die Beispiele im sp_describe_first_result_set Artikel anpassen, um sie zu verwenden sys.dm_exec_describe_first_result_set.

A. Rückgabeinformationen zu einer einzelnen Transact-SQL Aussage

Der folgende Code gibt Informationen zu den Ergebnissen einer Transact-SQL-Anweisung zurück.

USE @AdventureWorks2025;

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

B. Rückgainformationen zu einem Verfahren

Das folgende Beispiel erstellt eine gespeicherte Prozedur mit dem Namen pr_TestProc , die zwei Ergebnismengen zurückgibt. Dann zeigt das Beispiel, dass Informationen sys.dm_exec_describe_first_result_set über die erste Ergebnismenge im Verfahren zurückgegeben wird.

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. Geben Sie Metadaten aus einem Batch zurück, der mehrere Anweisungen enthält

Im folgenden Beispiel wird ein Batch ausgewertet, der zwei Transact-SQL-Anweisungen enthält. Das Resultset beschreibt das erste zurückgegebene Resultset.

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;