Hinweis
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 verwaltete Instanz
Azure Synapse Analytics Platform System (PDW)
-SQL-Analyseendpunkt in Microsoft Fabric
Warehouse in Microsoft Fabric Fabric
Enthält eine Zeile für jede Namensabhängigkeit in einer benutzerdefinierten Entität in der aktuellen Datenbank. Dazu gehören Abhängigkeiten zwischen nativ kompilierten, skalaren benutzerdefinierten Funktionen und anderen SQL Server-Modulen. Wenn eine Entität (die referenzierte Entität) namentlich in einem persistenten SQL-Ausdruck einer anderen Entität (der so genannten verweisenden oder referenzierenden Entität) aufgeführt ist, wird eine Abhängigkeit zwischen den beiden Entitäten erstellt. Wird beispielsweise in der Definition einer Sicht auf eine Tabelle verwiesen, hängt die Sicht als verweisende Entität von der Tabelle ab, der Entität, auf die verwiesen wird. Wenn die Tabelle gelöscht wird, ist die Sicht unbrauchbar.
Weitere Informationen dazu finden Sie unter Benutzerdefinierte Skalarfunktionen für In-Memory-OLTP.
Sie können diese Katalogsicht verwenden, um einen Bericht mit den Abhängigkeitsinformationen für die folgenden Entitäten zu erstellen:
Schemagebundene Entitäten.
Nicht schemagebundene Entitäten.
Datenbankübergreifende und serverübergreifende Entitäten. Die Namen der Entitäten werden gemeldet; allerdings werden Entitäts-IDs nicht aufgelöst.
Abhängigkeiten auf Spaltenebene für schemagebundene Entitäten. Abhängigkeiten auf Spaltenebene für nicht schemagebundene Objekte können mithilfe von sys.dm_sql_referenced_entities zurückgegeben werden.
Serverebene DDL wird im Kontext der
masterDatenbank ausgelöst.
| Spaltenname | Datentyp | BESCHREIBUNG |
|---|---|---|
referencing_id |
int | ID der verweisenden Entität. Nicht nullfähig. |
referencing_minor_id |
int | Die Spalten-ID, wenn es sich bei der verweisenden Entität um eine Spalte handelt. Andernfalls ist der Wert 0. Nicht nullfähig. |
referencing_class |
tinyint | Klasse der verweisenden Entität.1 = Objekt oder Spalte12 = Datenbank-DDL-Trigger13 = Server-DDL-TriggerNicht nullfähig. |
referencing_class_desc |
nvarchar(60) | Klassenbeschreibung der verweisenden Entität.OBJECT_OR_COLUMNDATABASE_DDL_TRIGGERSERVER_DDL_TRIGGERNicht nullfähig. |
is_schema_bound_reference |
bit |
1 = Die referenzierte Entität ist schemagebunden.0 = Die referenzierte Entität ist nicht schemagebunden.Nicht nullfähig. |
referenced_class |
tinyint | Klasse der Entität, auf die verwiesen wird.1 = Objekt oder Spalte6 = Typ7 = Index10 = XML-Schema-Sammlung21 = PartitionsfunktionNicht nullfähig. |
referenced_class_desc |
nvarchar(60) | Klassenbeschreibung der Entität, auf die verwiesen wird.OBJECT_OR_COLUMNTYPEINDEXXML_SCHEMA_COLLECTIONPARTITION_FUNCTIONNicht nullfähig. |
referenced_server_name |
sysname | Servername der Entität, auf die verwiesen wird. Diese Spalte wird für serverübergreifende Abhängigkeiten aufgefüllt, die auf der Angabe eines gültigen vierteiligen Namens basieren. Informationen zu mehrteiligen Namen finden Sie unter Transact-SQL-Syntaxkonventionen. NULL für nicht-schemagebundene Entitäten, für die die Entität referenziert wurde, ohne einen vierteiligen Namen anzugeben.NULL für schema-gebundene Entitäten, da sie in derselben Datenbank liegen müssen und daher nur mit einem zweiteiligen (schema.object) Namen definiert werden können. |
referenced_database_name |
sysname | Datenbankname der Entität, auf die verwiesen wird. Diese Spalte wird für datenbankübergreifende oder serverübergreifende Verweise aufgefüllt, die auf der Angabe eines gültigen dreiteiligen oder vierteiligen Namens basieren. NULL für nicht schemagebundene Referenzen, wenn sie mit einem einteiligen oder zweiteiligen Namen angegeben sind.NULL für schemagebundene Entitäten, da sie in derselben Datenbank liegen müssen und daher nur mit einem zweiteiligen (Schema) definiert werden können.Objekt) Name. |
referenced_schema_name |
sysname | Schema, in das die Entität gehört, auf die verwiesen wird.NULL für nicht-schemagebundene Referenzen, in denen die Entität ohne Angabe des Schemanamens referenziert wurde.Niemals NULL für schemagebundene Referenzen, da schemagebundene Entitäten mit einem zweiteiligen Namen definiert und referenziert werden müssen. |
referenced_entity_name |
sysname | Name der Entität, auf die verwiesen wird. Nicht nullfähig. |
referenced_id |
int | ID der Entität, auf die verwiesen wird. Der Wert dieser Spalte gilt niemals NULL für schemagebundene Referenzen. Der Wert dieser Spalte ist immer NULL für serverübergreifende und datenbankübergreifende Referenzen.NULL für Referenzen innerhalb der Datenbank, falls die ID nicht bestimmt werden kann. Für nicht schemagebundene Referenzen kann die ID in den folgenden Fällen nicht aufgelöst werden:Die referenzierte Entität existiert nicht in der Datenbank. Das Schema der Entität, auf die verwiesen wird, hängt vom Schema des Aufrufers ab und wird zur Laufzeit aufgelöst. In diesem Fall wird is_caller_dependent auf 1 festgelegt. |
referenced_minor_id |
int | ID der Spalte, auf die verwiesen wird, wenn es sich bei der verweisenden Entität um eine Spalte handelt. Andernfalls ist der Wert 0. Nicht nullfähig. Eine Entität, auf die verwiesen wird, ist eine Spalte, wenn diese in der verweisenden Entität namentlich identifiziert wird oder wenn die übergeordnete Entität in einer SELECT *-Anweisung verwendet wird. |
is_caller_dependent |
bit | Gibt an, dass die Schemabindung für die Entität, auf die verwiesen wird, zur Laufzeit erfolgt. Deshalb hängt die Auflösung der Entitäts-ID vom Schema des Aufrufers ab. Dies ist der Fall, wenn es sich bei der Entität, auf die verwiesen wird, um eine gespeicherte Prozedur, eine erweiterte gespeicherte Prozedur oder um eine nicht schemagebundene benutzerdefinierte Funktion handelt, die in einer EXECUTE-Anweisung aufgerufen wird.1 = Die referenzierte Entität ist aufruferabhängig und wird zur Laufzeit aufgelöst. In diesem Fall ist referenced_id .NULL0 = Die referenzierte Entitäts-ID ist nicht vom Aufrufer abhängig.Immer 0 für schemagebundene Verweise sowie für datenbankübergreifende und serverübergreifende Verweise, die explizit einen Schemanamen angeben. Zum Beispiel ist eine Referenz auf eine Entität im Format EXEC MyDatabase.MySchema.MyProc nicht vom Aufrufer abhängig. Ein Verweis im Format EXEC MyDatabase..MyProc ist jedoch aufruferabhängig. |
is_ambiguous |
bit | Gibt an, dass die Referenz mehrdeutig ist und zur Laufzeit in eine benutzerdefinierte Funktion, einen benutzerdefinierten Typ (UDT) oder eine XQuery-Referenz auf eine Spalte des Typs xml aufgelöst werden kann. Angenommen, die SELECT Sales.GetOrder() FROM Sales.MySales-Anweisung ist in einer gespeicherten Prozedur definiert. Bis die gespeicherte Prozedur ausgeführt ist, ist nicht bekannt, ob Sales.GetOrder() eine benutzerdefinierte Funktion im Schema Sales oder eine Spalte vom Typ Sales UDT mit einer Methode namens GetOrder()ist.1 = Referenz ist mehrdeutig.0 = Die Referenz ist eindeutig oder die Entität kann erfolgreich gebunden werden, wenn die Ansicht aufgerufen wird.Immer 0 für schemagebundene Verweise. |
Bemerkungen
In der folgenden Tabelle werden die Typen von Entitäten aufgelistet, für die Abhängigkeitsinformationen erstellt und verwaltet werden. Abhängigkeitsinformationen werden nicht für Regeln, Standardwerte, temporäre Tabellen, temporär gespeicherte Prozeduren oder Systemobjekte erstellt oder gepflegt.
Hinweis
Azure Synapse Analytics und Parallel Data Warehouse unterstützen Tabellen, Sichten, gefilterte Statistiken und Entitätstypen gespeicherter Transact-SQL-Prozeduren aus dieser Liste. Abhängigkeitsinformationen werden nur für Tabellen, Sichten und gefilterte Statistiken erstellt und verwaltet.
| Entitätstyp | Verweisende Entität | Entität, auf die verwiesen wird |
|---|---|---|
| Tabelle | Yes1 | Ja |
| Anzeigen | Ja | Ja |
| Gefilterter Index | Ja2 | Nein |
| Gefilterte Statistik | Ja2 | Nein |
| Transact-SQL gespeichertes Verfahren3 | Ja | Ja |
| Gespeicherte CLR-Prozedur | Nein | Ja |
| Benutzerdefinierte Transact-SQL-Funktion | Ja | Ja |
| CLR-benutzerdefinierte Funktion | Nein | Ja |
| CLR-Trigger (DML und DDL) | Nein | Nein |
| DML-Trigger in Transact-SQL | Ja | Nein |
| DDL-Trigger auf Datenbankebene in Transact-SQL | Ja | Nein |
| DDL-Trigger auf Serverebene in Transact-SQL | Ja | Nein |
| Erweiterte gespeicherte Prozeduren | Nein | Ja |
| Warteschlange | Nein | Ja |
| Synonym | Nein | Ja |
| Typ (Alias und CLR-benutzerdefinierter Typ) | Nein | Ja |
| XML-Schemaauflistung | Nein | Ja |
| Partitionsfunktion | Nein | Ja |
1 Eine Tabelle wird nur als referenzierende Entität erfasst, wenn sie in der Definition einer berechneten Spalte, einer CHECK-Einschränkung oder DEFAULT einer XML-Schema-Sammlung auf ein Transact-SQL Modul, benutzerdefinierten Typ oder XML-Schema-Sammlung verweist.
2 Jede im Filterprädikat verwendete Spalte wird als referenzierende Entität erfasst.
3 Nummerierte gespeicherte Prozeduren mit einem ganzzahligen Wert größer als 1 werden weder als referenzierende noch als referenzierte Entität nachgefolgt.
Berechtigungen
Benötigt VIEW die DEFINITION-Berechtigung für die Datenbank und die SELECT-Berechtigung für sys.sql_expression_dependencies die Datenbank. Standardmäßig wird die SELECT-Berechtigung nur Mitgliedern der festen Datenbankrolle db_owner gewährt. Wenn SELECT- und VIEW DEFINITION-Berechtigungen einem anderen Benutzer erteilt werden, kann der Grantee alle Abhängigkeiten in der Datenbank anzeigen.
Beispiele
A. Geben Entitäten zurück, die von einer anderen Entität referenziert werden
Im folgenden Beispiel werden die Tabellen und Spalten zurückgegeben, auf die in der Sicht Production.vProductAndDescription verwiesen wird. Die Sicht hängt von den Entitäten (Tabellen und Spalten) ab, die in den Spalten referenced_entity_name und referenced_column_name zurückgegeben werden.
USE AdventureWorks2022;
GO
SELECT
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_description,
COALESCE (COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
referencing_class_desc,
referenced_server_name,
referenced_database_name,
referenced_schema_name,
referenced_entity_name,
COALESCE (COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,
is_caller_dependent,
is_ambiguous
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.objects AS o
ON sed.referencing_id = o.object_id
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');
B. Geben Entitäten zurück, die auf eine andere Entität verweisen
Im folgenden Beispiel werden die Entitäten zurückgegeben, die auf die Tabelle Production.Product verweisen. Die in der referencing_entity_name-Spalte zurückgegebenen Entitäten hängen von der Product-Tabelle ab.
USE AdventureWorks2022;
GO
SELECT
OBJECT_SCHEMA_NAME(referencing_id) AS referencing_schema_name,
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_description,
COALESCE (COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
referencing_class_desc,
referenced_class_desc,
referenced_server_name,
referenced_database_name,
referenced_schema_name,
referenced_entity_name,
COALESCE (COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,
is_caller_dependent,
is_ambiguous
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.objects AS o
ON sed.referencing_id = o.object_id
WHERE referenced_id = OBJECT_ID(N'Production.Product');
C. Geben Datenbanküberschreitende Abhängigkeiten zurück
Im folgenden Beispiel werden alle datenbankübergreifenden Abhängigkeiten zurückgegeben. Im Beispiel werden zuerst die Datenbank db1 sowie zwei gespeicherte Prozeduren erstellt, die auf Tabellen in den Datenbanken db2 und db3 verweisen. Die sys.sql_expression_dependencies-Tabelle wird dann abgefragt, um die datenbankübergreifenden Abhängigkeiten zwischen den Prozeduren und den Tabellen zu berichten.
NULL wird in der referenced_schema_name Spalte für die referenzierte Entität t3 zurückgegeben, da für diese Entität in der Definition des Verfahrens kein Schemaname angegeben ist.
CREATE DATABASE db1;
GO
USE db1;
GO
CREATE PROCEDURE p1 AS
SELECT * FROM db2.s1.t1;
GO
CREATE PROCEDURE p2 AS
UPDATE db3..t3
SET c1 = c1 + 1;
GO
SELECT
OBJECT_NAME(referencing_id),
referenced_database_name,
referenced_schema_name,
referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL;
GO
USE master;
GO
DROP DATABASE db1;