Wie finde ich am schnellsten heraus welche Entitäten ein Datenbankobjekt (Prozedure, View, Funktion, Tabellen usw.) hat? Es ist im Laufe der zeit ja nicht möglich alle Abhängigkeiten einer Prozedur zu wissen.
Um schnell an diese Information zu kommen hat Microsoft hat hierzu eine dynamische Verwaltungsfunktion bereit gestellt.
- sys.dm_sql_referencing_entities
Die Verwaltungsfunktion sys.dm_sql_referencing_entities ist auf dem SQL-Server ab der Version 2008 und in Azure SQL-Datenbanken verfügbar.
In den Datawarehouses ist die Funktion nicht verfügbar.
Syntax
Es gibt zwei Möglichkeiten die Syntax zu gestallten.
Entitäten, die auf eine Entität verweisen:
Abhängigkeiten der aktuellen Datenbank, die auf das angegebene Objekt verweisen.
USE AdventureWorks
GO
SELECT
*
FROM
sys.dm_sql_referencing_entities ('Sales.SalesPerson', 'OBJECT')
GO
Hier ein Beispiel Result-Set:
referenced_schema_name | referencing_entity_name | referencing_id | referencing_class | referencing_class_desc | is_caller_dependent |
---|---|---|---|---|---|
HumanResources | uspUpdateEmployeeHireInfo | 951674438 | 1 | OBJECT_OR_COLUMN | 0 |
HumanResources | uspUpdateEmployeeLogin | 967674495 | 1 | OBJECT_OR_COLUMN | 0 |
HumanResources | uspUpdateEmployeePersonalInfo | 983674552 | 1 | OBJECT_OR_COLUMN | 0 |
Production | iWorkOrder | 375672386 | 1 | OBJECT_OR_COLUMN | 0 |
Production | uWorkOrder | 391672443 | 1 | OBJECT_OR_COLUMN | 0 |
Purchasing | dVendor | 359672329 | 1 | OBJECT_OR_COLUMN | 0 |
Purchasing | iPurchaseOrderDetail | 279672044 | 1 | OBJECT_OR_COLUMN | 0 |
Purchasing | uPurchaseOrderDetail | 295672101 | 1 | OBJECT_OR_COLUMN | 0 |
Purchasing | uPurchaseOrderHeader | 311672158 | 1 | OBJECT_OR_COLUMN | 0 |
Sales | iduSalesOrderDetail | 327672215 | 1 | OBJECT_OR_COLUMN | 0 |
Sales | uSalesOrderHeader | 343672272 | 1 | OBJECT_OR_COLUMN | 0 |
Entitäten, die auf einen Typ verweisen:
Es werden Abhängigkeiten zurück geben, die auf diesen Alias verweisen.
USE AdventureWorks
GO
SELECT
*
FROM
sys.dm_sql_referencing_entities ('Sales.SalesPerson', 'TYPE')
GO
Rückgabewerte:
- referencing_schema_name ==> Schemaname
- referencing_entity_name ==> Referenzierende Entität
- referencing_id ==> ReferenzID
- referencing_class ==> Klasse der Entität (1 = Objekt; 12 = Datenbank DDL-Trigger; 13 = Server DDL-Trigger)
- referencing_class_desc ==> Beschreibung der Klassen Entität
- is_caller_dependent ==> Information über Auflösung der Entität (0 = Entität ist kein aufruferabhängiges Element; 1 = Aufrufer abhängige Entität)
Ausnahme
Unter folgenden Bedingungen wird ein leeres Resultset zurück gegeben:
- Es wird ein Systemobjekt angegeben.
- Die angegebene Entität existiert nicht in der Datenbank.
- Die Entität hat keine Verweise.
- Die Parameter sind ungültig.
Abhängigkeitsinformationen werden für die folgenden Elemente erstellt:
Entitätstyp | Verweisende Entität | Entität, auf die verwiesen wird |
---|---|---|
Tabelle | Ja | Ja |
Ansicht | Ja | Ja |
Prozedur | Ja | Ja |
CLR-Prozedur | Ja | |
benutzerdefinierte Funktion | Ja | Ja |
CLR-benutzerdefinierte Funktion | Nein | Ja |
CLR-Trigger | Nein | Nein |
DML-Trigger | Ja | Nein |
DML-Trigger Datenbank | Ja | Nein |
DML-Trigger Server | Ja | Nein |
Erweiterte gespeicherte Prozeduren | Nein | Ja |
Warteschlange | Nein | Ja |
Synonyme | Nein | Ja |
Typ | Nein | Ja |
XML | Nein | Ja |
Partitionsfunktion | Nein | Ja |
Berechtigungen
SQL Server 2008 bis 2012
- CONTROL-Berechtigung
- SELECT Berechtigung für Sys. dm_sql_referencing_entities
SQL Server 2014 bis 2017
- VIEW DEFINITION
- VIEW ANY DEFINITION
Achtung
Es gibt bereits eine ähnliche Verwaltungsfunktion mit dem Namen sp_depends.
Diese Verwaltungsfunktion wird möglicherweise in neuen Versionen des SQL-Servers nicht mehr verfügbar sein.
Sollte ihr diese Verwaltungsfunktion verwendet, stellt bitte eure Scripte um.