sys.sql_expression_dependencies (Transact-SQL)
Gilt für: SQL Server Azure SQL verwaltete Instanz Azure Synapse Analytics Platform System (PDW)-SQL-Analyseendpunkt in Microsoft FabricWarehouse 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. Entitätsnamen werden gemeldet; Entitäts-IDs werden jedoch 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.
DDL-Trigger auf Serverebene im Kontext der Masterdatenbank.
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
referencing_id | int | ID der verweisenden Entität. Lässt keine NULL-Werte zu. |
referencing_minor_id | int | Die Spalten-ID, wenn es sich bei der verweisenden Entität um eine Spalte handelt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
referencing_class | tinyint | Klasse der verweisenden Entität. 1 = Objekt oder Spalte 12 = DDL-Trigger auf Datenbankebene 13 = DDL-Trigger auf Serverebene Lässt keine NULL-Werte zu. |
referencing_class_desc | nvarchar(60) | Klassenbeschreibung der verweisenden Entität. OBJECT_OR_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER Lässt keine NULL-Werte zu. |
is_schema_bound_reference | bit | 1 = Entität, auf die verwiesen wird, ist schemagebunden. 0 = Entität, auf die verwiesen wird, ist nicht schemagebunden. Lässt keine NULL-Werte zu. |
referenced_class | tinyint | Klasse der Entität, auf die verwiesen wird. 1 = Objekt oder Spalte 6 = Typ 10 = XML-Schemaauflistung 21 = Partitionsfunktion Lässt keine NULL-Werte zu. |
referenced_class_desc | nvarchar(60) | Klassenbeschreibung der Entität, auf die verwiesen wird. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION Lässt keine NULL-Werte zu. |
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 ohne Angabe eines vierteiligen Namens auf die Entität verwiesen wurde. NULL für schemagebundene Entitäten, da sich diese in derselben Datenbank befinden müssen und deshalb nur mit einem zweiteiligen Namen (schema.object) 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 Verweise, wenn auf Basis eines einteiligen oder zweiteiligen Namens angegeben. NULL für schemagebundene Entitäten, da sich diese in derselben Datenbank befinden müssen und deshalb nur mit einem zweiteiligen Namen (schema.object) definiert werden können. |
referenced_schema_name | sysname | Schema, in das die Entität gehört, auf die verwiesen wird. NULL für nicht schemagebundene Verweise, in denen ohne Angabe des Schemanamens auf die Entität verwiesen wird. Niemals NULL für schemagebundene Verweise, da schemagebundene Entitäten mit einem zweiteiligen Namen definiert werden müssen und mit diesem zweiteiligen Namen auf sie verwiesen werden muss. |
referenced_entity_name | sysname | Name der Entität, auf die verwiesen wird. Lässt keine NULL-Werte zu. |
referenced_id | int | ID der Entität, auf die verwiesen wird. Der Wert dieser Spalte ist für schemagebundene Verweise niemals NULL. Der Wert dieser Spalte ist für server- und datenbankübergreifende Verweise immer NULL. NULL für Verweise innerhalb der Datenbank, wenn die ID nicht bestimmt werden kann. Für nicht schemagebundene Verweise kann die ID in den folgenden Fällen nicht aufgelöst werden: Die Entität, auf die verwiesen wird, ist in der Datenbank nicht vorhanden. 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. Lässt keine NULL-Werte zu. 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 Entität, auf die verwiesen wird, hängt vom Aufrufer ab und wird zur Laufzeit aufgelöst. In diesem Fall ist referenced_id gleich NULL. 0 = Die Entitäts-ID, auf die verwiesen wird, ist nicht aufruferabhängig. Immer 0 für schemagebundene Verweise sowie für datenbankübergreifende und serverübergreifende Verweise, die explizit einen Schemanamen angeben. Zum Beispiel ist ein Verweis auf eine Entität im Format EXEC MyDatabase.MySchema.MyProc nicht aufruferabhängig. Ein Verweis im Format EXEC MyDatabase..MyProc ist jedoch aufruferabhängig. |
is_ambiguous | bit | Weist darauf hin, dass es sich um einen mehrdeutigen Verweis handelt, der zur Laufzeit in eine benutzerdefinierte Funktion, in einen benutzerdefinierten Typ (UDT) oder in einen XQuery-Verweis auf eine Spalte des Datentyps xml aufgelöst werden kann. Angenommen, die SELECT Sales.GetOrder() FROM Sales.MySales -Anweisung ist in einer gespeicherten Prozedur definiert. Bis zur Ausführung der gespeicherten Prozedur ist unbekannt, ob Sales.GetOrder() eine benutzerdefinierte Funktion im Schema Sales oder in der Spalte namens Sales vom Typ UDT mit einer Methode namens GetOrder() ist.1 = Verweis ist mehrdeutig. 0 = Verweis ist eindeutig, oder die Entität kann beim Aufruf der Sicht erfolgreich gebunden werden. 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. Für Regeln, Standardwerte, temporäre Tabellen, temporär gespeicherte Prozeduren oder Systemobjekte werden keine Abhängigkeitsinformationen erstellt oder verwaltet.
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 | Ja* | Ja |
Anzeigen | Ja | Ja |
Gefilterter Index | Ja** | Nein |
Gefilterte Statistik | Ja** | Nein |
Gespeicherte Transact-SQL-Prozedur*** | 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 |
* Eine Tabelle wird nur dann als verweisende Entität nachverfolgt, wenn sie auf ein Transact-SQL-Modul, einen benutzerdefinierten Typ oder eine XML-Schemaauflistung in der Definition einer berechneten Spalte, einer CHECK-Einschränkung oder einer DEFAULT-Einschränkung verweist.
** Jede im Filterprädikat verwendete Spalte wird als verweisende Entität aufgezeichnet.
*** Nummerierte gespeicherte Prozeduren mit einem ganzzahligen Wert größer 1 werden weder als verweisende Entität noch als Entität, auf die verwiesen wird, aufgezeichnet.
Berechtigungen
Erfordert die VIEW DEFINITION-Berechtigung für die Datenbank und die SELECT-Berechtigung für sys.sql_expression_dependencies für die Datenbank. Standardmäßig wird die SELECT-Berechtigung nur Mitgliedern der festen Datenbankrolle db_owner gewährt. Wenn einem anderen Benutzer die SELECT-Berechtigung und die VIEW DEFINITION-Berechtigung erteilt werden, kann dieser Berechtigte alle Abhängigkeiten in der Datenbank anzeigen.
Beispiele
A. Zurückgeben von Entitäten, auf die von einer anderen Entität verwiesen wird
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');
GO
B. Zurückgeben von Entitäten, 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');
GO
C. Zurückgeben von datenbankübergreifenden Abhängigkeiten
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. Beachten Sie, dass für die Entität referenced_schema_name
, auf die verwiesen wird, in der Spalte t3
NULL zurückgegeben wird, weil in der Definition der Prozedur kein Schemaname für diese Entität angegeben wurde.
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;
GO
Weitere Informationen
sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)