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_namereferencing_entity_namereferencing_idreferencing_classreferencing_class_descis_caller_dependent
HumanResourcesuspUpdateEmployeeHireInfo9516744381OBJECT_OR_COLUMN0
HumanResourcesuspUpdateEmployeeLogin9676744951OBJECT_OR_COLUMN0
HumanResourcesuspUpdateEmployeePersonalInfo9836745521OBJECT_OR_COLUMN0
ProductioniWorkOrder3756723861OBJECT_OR_COLUMN0
ProductionuWorkOrder3916724431OBJECT_OR_COLUMN0
PurchasingdVendor3596723291OBJECT_OR_COLUMN0
PurchasingiPurchaseOrderDetail2796720441OBJECT_OR_COLUMN0
PurchasinguPurchaseOrderDetail2956721011OBJECT_OR_COLUMN0
PurchasinguPurchaseOrderHeader3116721581OBJECT_OR_COLUMN0
SalesiduSalesOrderDetail3276722151OBJECT_OR_COLUMN0
SalesuSalesOrderHeader3436722721OBJECT_OR_COLUMN0

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ätstypVerweisende EntitätEntität, auf die verwiesen wird
TabelleJaJa
AnsichtJaJa
ProzedurJaJa
CLR-ProzedurJa
benutzerdefinierte FunktionJaJa
CLR-benutzerdefinierte FunktionNeinJa
CLR-TriggerNeinNein
DML-TriggerJaNein
DML-Trigger DatenbankJaNein
DML-Trigger ServerJaNein
Erweiterte gespeicherte ProzedurenNeinJa
WarteschlangeNeinJa
SynonymeNeinJa
TypNeinJa
XMLNeinJa
PartitionsfunktionNeinJa

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.

Von Michael