sys.sql_expression_abhängigkeiten (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. 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 master Datenbank 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 Spalte
12 = Datenbank-DDL-Trigger
13 = Server-DDL-Trigger

Nicht nullfähig.
referencing_class_desc nvarchar(60) Klassenbeschreibung der verweisenden Entität.

OBJECT_OR_COLUMN
DATABASE_DDL_TRIGGER
SERVER_DDL_TRIGGER

Nicht 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 Spalte
6 = Typ
7 = Index
10 = XML-Schema-Sammlung
21 = Partitionsfunktion

Nicht nullfähig.
referenced_class_desc nvarchar(60) Klassenbeschreibung der Entität, auf die verwiesen wird.

OBJECT_OR_COLUMN
TYPE
INDEX
XML_SCHEMA_COLLECTION
PARTITION_FUNCTION

Nicht 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 .NULL

0 = 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;