sys.dm_sql_referenced_entities (Transact-SQL)
Gibt eine Zeile für jede benutzerdefinierte Entität aus, auf die in der Definition der angegebenen verweisenden Entität anhand des Namens verwiesen wird. Wenn eine benutzerdefinierte Entität (die Entität, auf die verwiesen wird) namentlich in einem permanenten SQL-Ausdruck einer anderen benutzerdefinierten Entität, der sogenannten verweisenden Entität aufgeführt ist, wird eine Abhängigkeit zwischen den beiden Entitäten erstellt. Handelt es sich beispielsweise bei einer gespeicherten Prozedur um die angegebene verweisende Entität, gibt diese Funktion alle benutzerdefinierten Entitäten zurück, auf die die gespeicherte Prozedur verweist, z. B. Tabellen, Sichten, benutzerdefinierte Typen (UDTs) oder andere gespeicherte Prozeduren.
Verwenden Sie diese dynamische Verwaltungsfunktion, um zu folgenden Entitätstypen, auf die in der verweisenden Entität verwiesen wird, einen Bericht zu erstellen.
Schemagebundene Entitäten
Nicht schemagebundene Entitäten
Datenbankübergreifende und serverübergreifende Entitäten
Abhängigkeiten auf Spaltenebene von schemagebundenen und nicht schemagebundenen Entitäten
Benutzerdefinierte Typen (Alias und CLR UDT)
XML-Schemaauflistungen
Partitionsfunktionen
Syntax
sys.dm_sql_referenced_entities (
' [ schema_name. ] referencing_entity_name ' , ' <referencing_class> ' )
<referencing_class> ::=
{
OBJECT
| DATABASE_DDL_TRIGGER
| SERVER_DDL_TRIGGER
}
Argumente
[ schema_name. ] referencing_entity_name
Der Name der verweisenden Entität. schema_name ist erforderlich, wenn die verweisende Klasse OBJECT ist.schema_name.referencing_entity_name ist vom Datentyp nvarchar(517).
<referencing_class> ::= { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }
Die Klasse der angegebenen verweisenden Entität. Pro Anweisung kann nur eine Klasse angegeben werden.<referencing_class> ist vom Datentyp nvarchar(60).
Zurückgegebene Tabelle
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
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. |
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 Abhängigkeiten, 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 mithilfe 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 (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. |
referenced_entity_name |
sysname |
Name der Entität, auf die verwiesen wird. Lässt keine NULL-Werte zu. |
referenced_minor_name |
sysname |
Der Spaltenname, wenn es sich bei der Entität, auf die verwiesen wird, um eine Spalte handelt. Andernfalls ist der Wert NULL. Beispielsweise hat referenced_minor_name den Wert NULL in der Zeile, in der die Entität, auf die verwiesen wird, selbst aufgeführt wird. 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. |
referenced_id |
int |
ID der Entität, auf die verwiesen wird. Wenn referenced_minor_id nicht 0 ist, ist referenced_id die Entität, in der die Spalte definiert wird. Immer NULL für serverübergreifende Verweise. NULL für datenbankübergreifende Verweise, wenn die ID nicht bestimmt werden kann, da die Datenbank offline ist oder die Entität nicht gebunden werden kann. 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:
Niemals NULL für schemagebundene Verweise. |
referenced_minor_id |
int |
Die Spalten-ID, wenn es sich bei der Entität, auf die verwiesen wird, um eine Spalte handelt. Andernfalls ist der Wert 0. Beispielsweise hat referenced_minor_is den Wert NULL in der Zeile, in der die Entität, auf die verwiesen wird, selbst aufgeführt wird. Für nicht schemagebundene Verweise werden Spaltenabhängigkeiten nur gemeldet, wenn alle Entitäten, auf die verwiesen wird, gebunden werden können. Wenn eine der Entitäten, auf die verwiesen wird, nicht gebunden werden kann, werden keine Abhängigkeiten auf Spaltenebene gemeldet, und referenced_minor_id wird auf 0 festgelegt. Siehe Beispiel D. |
referenced_class |
tinyint |
Klasse der Entität, auf die verwiesen wird. 1 = Objekt oder Spalte 6 = Typ 10 = XML-Schemaauflistung 21 = Partitionsfunktion |
referenced_class_desc |
nvarchar(60) |
Klassenbeschreibung der Entität, auf die verwiesen wird. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
is_caller_dependent |
bit |
Gibt an, dass die Schemabindung für die Entität, auf die verwiesen wird, zur Laufzeit erfolgt. Deshalb ist die Auflösung der Entitäts-ID vom Schema des Aufrufers abhängig. 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 benutzerdefinierte Funktion handelt, die in einer EXECUTE-Anweisung aufgerufen wird. 1 = Die Entität, auf die verwiesen wird, ist vom Aufrufer abhängig 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 hingegen ist 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 nicht bekannt, 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 auf eine benutzerdefinierte Funktion oder Spalte, für die die benutzerdefinierte Typmethode (UDT) mehrdeutig ist. 0 = Verweis ist eindeutig, oder die Entität kann beim Aufruf der Funktion erfolgreich gebunden werden. Immer 0 für schemagebundene Verweise. |
Ausnahmen
Gibt unter den folgenden Bedingungen ein leeres Resultset zurück:
Ein Systemobjekt wird angegeben.
Die angegebene Entität ist in der Datenbank nicht vorhanden.
Die angegebene Entität verweist auf keine Entitäten.
Ein ungültiger Parameter wird übergeben.
Gibt einen Fehler zurück, wenn die angegebene verweisende Entität eine nummerierte gespeicherte Prozedur ist.
Gibt Fehler 2020 zurück, wenn Spaltenabhängigkeiten nicht aufgelöst werden können. Dieser Fehler verhindert nicht, dass die Abfrage Abhängigkeiten auf Objektebene zurückgibt. Weitere Informationen finden Sie unter Problembehandlung bei SQL-Abhängigkeiten.
Hinweise
Diese Funktion kann im Kontext jeder beliebigen Datenbank ausgeführt werden, um die Entitäten zurückzugeben, die auf einen DDL-Trigger auf Serverebene verweisen.
In der folgenden Tabelle werden die Typen von Entitäten, für die Abhängigkeitsinformationen erstellt und verwaltet werden, aufgelistet. 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 |
Gespeicherte Transact-SQL-Prozedur** |
Ja |
Ja |
gespeicherte CLR-Prozedur |
Nein |
Ja |
Benutzerdefinierte Transact-SQL-Funktion |
Ja |
Ja |
benutzerdefinierte CLR-Funktion |
Nein |
Ja |
CLR-Trigger (DML und DDL) |
Nein |
Nein |
Transact-SQL-DML-Trigger |
Ja |
Nein |
Transact-SQL-DDL-Trigger auf Datenbankebene |
Ja |
Nein |
Transact-SQL-DDL-Trigger auf Serverebene |
Ja |
Nein |
Erweiterte gespeicherte Prozeduren |
Nein |
Ja |
Warteschlange |
Nein |
Ja |
Synonym |
Nein |
Ja |
Typ (Alias und benutzerdefinierter CLR-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.
** Nummerierte gespeicherte Prozeduren mit einem ganzzahligen Wert größer als 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 SELECT-Berechtigung für sys.dm_sql_referenced_entities und die VIEW DEFINITION-Berechtigung für die verweisende Entität. Standardmäßig wird die SELECT-Berechtigung der public-Rolle erteilt. Erfordert die Berechtigung VIEW DEFINITION oder ALTER DATABASE DDL TRIGGER für die Datenbank, wenn es sich bei der verweisenden Entität um einen DDL-Trigger auf Datenbankebene handelt. Erfordert die VIEW ANY DEFINITION-Berechtigung für den Server, wenn es sich bei der verweisenden Entität um einen DDL-Trigger auf Serverebene handelt.
Beispiele
A. Zurückgeben von Entitäten, auf die von einem DDL-Trigger auf Datenbankebene verwiesen wird
Im folgenden Beispiel werden die Entitäten (Tabellen und Spalten) zurückgegeben, auf die vom DDL-Trigger auf Datenbankebene ddlDatabaseTriggerLog verwiesen wird.
USE AdventureWorks;
GO
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,
referenced_minor_id, referenced_class_desc
FROM sys.dm_sql_referenced_entities ('ddlDatabaseTriggerLog', 'DATABASE_DDL_TRIGGER');
GO
B. Zurückgeben von Entitäten, auf die von einem Objekt verwiesen wird
Im folgenden Beispiel werden die Entitäten zurückgegeben, auf die von der benutzerdefinierten Funktion dbo.ufnGetContactInformation verwiesen wird.
USE AdventureWorks;
GO
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,
referenced_minor_id, referenced_class_desc, is_caller_dependent, is_ambiguous
FROM sys.dm_sql_referenced_entities ('dbo.ufnGetContactInformation', 'OBJECT');
GO
C. Zurückgeben von Spaltenabhängigkeiten
Im folgenden Beispiel wird die Table1-Tabelle mit der berechneten Spalte c, die als Summe der Spalten a und b definiert ist, erstellt. Anschließend wird die sys.dm_sql_referenced_entities-Sicht aufgerufen. Die Sicht gibt zwei Zeilen zurück: eine für jede in der berechneten Spalte definierte Spalte.
USE AdventureWorks;
GO
CREATE TABLE dbo.Table1 (a int, b int, c AS a + b);
GO
SELECT referenced_schema_name AS schema_name,
referenced_entity_name AS table_name,
referenced_minor_name AS referenced_column,
COALESCE(COL_NAME(OBJECT_ID(N'dbo.Table1'),referencing_minor_id), 'N/A') AS referencing_column_name
FROM sys.dm_sql_referenced_entities ('dbo.Table1', 'OBJECT');
GO
-- Remove the table.
DROP TABLE dbo.Table1;
GO
Dies ist das Resultset.
schema_name table_name referenced_column referencing_column
----------- ---------- ----------------- ------------------
dbo Table1 a c
dbo Table1 b c
D. Zurückgeben von nicht schemagebundenen Spaltenabhängigkeiten
Im folgenden Beispiel wird die Table1-Tabelle gelöscht und die Table2-Tabelle sowie die gespeicherte Prozedur Proc1 erstellt. Die Prozedur verweist auf die Table2-Tabelle und auf die nicht vorhandene Table1-Tabelle. Die sys.dm_sql_referenced_entities-Sicht wird mit der gespeicherten Prozedur ausgeführt, die als verweisende Entität angegeben ist. Im Resultset wird eine Zeile für Table1 und Table2 angezeigt. Da Table1 nicht vorhanden ist, können die Spaltenabhängigkeiten nicht aufgelöst werden, und es wird der Fehler 2020 zurückgegeben.
USE AdventureWorks;
GO
IF OBJECT_ID ( 'dbo.Table1', 'U' ) IS NOT NULL
DROP TABLE dbo.Table1;
GO
CREATE TABLE dbo.Table2 (c1 int, c2 int);
GO
CREATE PROCEDURE dbo.Proc1 AS
SELECT a, b, c FROM Table1;
SELECT c1, c2 FROM Table2;
GO
SELECT referenced_id, referenced_entity_name AS table_name, referenced_minor_name AS referenced_column_name
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
E. Veranschaulichen der dynamischen Verwaltung von Abhängigkeiten
Im folgenden Beispiel wird eine Erweiterung von Beispiel D dargestellt und gezeigt, dass Abhängigkeiten dynamisch verwaltet werden. Das Beispiel erstellt zunächst die in Beispiel D gelöschte Table1-Tabelle neu. Danach wird sys.dm_sql_referenced_entities erneut ausgeführt. Dabei wird die gespeicherte Prozedur als verweisende Entität angegeben. Im Resultset wird gezeigt, dass beide Tabellen zusammen mit den in der gespeicherten Prozedur definierten zugehörigen Spalten zurückgegeben werden.
USE AdventureWorks;
GO
CREATE TABLE Table1 (a int, b int, c AS a + b);
GO
SELECT referenced_id, referenced_entity_name AS table_name, referenced_minor_name as column_name
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
DROP TABLE Table1, Table2;
DROP PROC Proc1;
GO
Dies ist das Resultset.
referenced_id, table_name, column_name
------------- ----------- -----------
2139154566 Table1 NULL
2139154566 Table1 a
2139154566 Table1 b
2139154566 Table1 c
2707154552 Table2 NULL
2707154552 Table2 c1
2707154552 Table2 c2
Änderungsverlauf
Aktualisierter Inhalt |
---|
Die Anweisung, "Für CLR-Tabellenwertfunktionen werden keine Spaltenabhängigkeiten aufgezeichnet", im Abschnitt "Hinweise" wurde entfernt. |
Der Datentyp des referencing_entity_name-Parameters wurde korrigiert. |