sys.sql_expression_dependencies (Transact-SQL)

Enthält eine Zeile für jede Namensabhängigkeit in einer benutzerdefinierten Entität in der aktuellen Datenbank. Wenn eine Entität (die Entität, auf die verwiesen wird) namentlich in einem permanenten SQL-Ausdruck einer anderen Entität (der so genannten verweisenden 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.

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 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. NULL ist nicht zulässig.

referencing_minor_id

int

Die Spalten-ID, wenn es sich bei der verweisenden Entität um eine Spalte handelt. Andernfalls ist der Wert 0. NULL ist nicht zulässig.

referencing_class

tinyint

Klasse der verweisenden Entität.

1 = Objekt oder Spalte

12 = DDL-Trigger auf Datenbankebene

13 = DDL-Trigger auf Serverebene

NULL ist nicht zulässig.

referencing_class_desc

nvarchar(60)

Klassenbeschreibung der verweisenden Entität.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

NULL ist nicht zulässig.

is_schema_bound_reference

bit

1 = Entität, auf die verwiesen wird, ist schemagebunden.

0 = Entität, auf die verwiesen wird, ist nicht schemagebunden.

NULL ist nicht zulässig.

referenced_class

tinyint

Klasse der Entität, auf die verwiesen wird.

1 = Objekt oder Spalte

6 = Typ

10 = XML-Schemaauflistung

21 = Partitionsfunktion

NULL ist nicht zulässig.

referenced_class_desc

nvarchar(60)

Klassenbeschreibung der Entität, auf die verwiesen wird.

OBJECT_OR_COLUMN

TYPE

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

NULL ist nicht zulässig.

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. Weitere 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 Abhängigkeiten, 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 Abhängigkeiten, da sich diese in derselben Datenbank befinden müssen und deshalb nur mit einem zweiteiligen (schema.object) Namen 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. NULL ist nicht zulässig.

referenced_id

int

ID der Entität, auf die verwiesen wird.

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.

Niemals NULL für schemagebundene Verweise.

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. NULL ist nicht zulässig.

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.

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.

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

Gespeicherte Transact-SQL-Prozedur***

Ja

Ja

CLR-gespeicherte Prozedur

Nein

Ja

Benutzerdefinierte Transact-SQL-Funktion

Ja

Ja

CLR-benutzerdefinierte Funktion

Nein

Ja

CLR-Trigger (DML und DDL)

Nein

Nein

Transact-SQL-DML-Trigger

Ja

Nein

Transact-SQL-DDL-Trigger auf Datenbankebene

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 aufgezeichnet, wenn sie auf ein Transact-SQL-Modul, einen benutzerdefinierten Typ oder auf 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.

Weitere Informationen finden Sie unter Grundlegendes zu SQL-Abhängigkeiten.

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 AdventureWorks2008R2;
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_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 AdventureWorks2008R2;
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 t3, auf die verwiesen wird, in der Spalte referenced_schema_name 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