sys.sql_expression_dependencies (Transact-SQL)

Gilt für:yesSQL Server (alle unterstützten Versionen) YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

Enthält eine Zeile für jede Namensabhängigkeit in einer benutzerdefinierten Entität in der aktuellen Datenbank. Dies umfasst Abhängigkeiten zwischen systemeigenen kompilierten, benutzerdefinierten Funktionen und anderen SQL Server Modulen. Eine Abhängigkeit zwischen zwei Entitäten wird erstellt, wenn eine Entität, die als referenzierte Entität bezeichnet wird, nach Dem Namen in einem beibehaltenen SQL Ausdruck einer anderen Entität angezeigt wird, die als Referenzeinheit bezeichnet wird. 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. Spaltenebenenabhängigkeiten 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 (Transact-SQL).

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 sie sich in derselben Datenbank befinden müssen und daher nur mithilfe eines Zweiteilernamens (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 sie sich in derselben Datenbank befinden müssen und daher nur mithilfe eines Zweiteilernamens (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 nie NULL für schemagebundene Verweise. Der Wert dieser Spalte ist immer NULL für serverübergreifende und datenbankübergreifende Verweise.

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 Gibt an, dass der Verweis mehrdeutig ist und zur Laufzeit auf eine benutzerdefinierte Funktion, einen benutzerdefinierten Typ (UDT) oder einen xquery-Verweis 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 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.

Hinweise

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 Tabellen, Ansichten, gefilterte Statistiken und Transact-SQL gespeicherte Entitätstypen aus dieser Liste unterstützen. Abhängigkeitsinformationen werden nur für Tabellen, Ansichten und gefilterte Statistiken erstellt und verwaltet.

Entitätstyp Verweisende Entität Entität, auf die verwiesen wird
Tabelle Ja* Ja
Sicht Ja Ja
Gefilterter Index Ja** Nein
Gefilterte Statistik Ja** Nein
Transact-SQL gespeicherte Prozedur** Ja Ja
Gespeicherte CLR-Prozedur Nein Ja
Transact-SQL benutzerdefinierte Funktion Ja Ja
CLR-benutzerdefinierte Funktion Nein Ja
CLR-Trigger (DML und DDL) Nein Nein
Transact-SQL DML-Trigger Ja Nein
Transact-SQL Datenbankebene DDL-Trigger Ja Nein
Transact-SQL DDL-Trigger auf Serverebene 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 als referenzierende Entität nachverfolgt, wenn sie auf ein Transact-SQL-Modul, benutzerdefinierten Typ oder eine XML-Schemasammlung in der Definition einer berechneten Spalte, CHECK-Einschränkung oder 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 AdventureWorks2012;  
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_desciption,   
    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 AdventureWorks2012;  
GO  
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
    OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_desciption,   
    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)