Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-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;