Delen via


sys.dm_sql_referencing_entities (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Geeft één rij terug voor elke entiteit in de huidige database die een andere door de gebruiker gedefinieerde entiteit bij naam verwijst. Er ontstaat een afhankelijkheid tussen twee entiteiten wanneer één entiteit, de genoemde entiteit, bij naam verschijnt in een behouden SQL-expressie van een andere entiteit, genaamd de referentie-entiteit. Als bijvoorbeeld een door de gebruiker gedefinieerd type (UDT) als de gerefereerde entiteit wordt gespecificeerd, geeft deze functie elke door de gebruiker gedefinieerde entiteit terug die dat type bij naam verwijst in zijn definitie. De functie geeft geen entiteiten terug in andere databases die mogelijk naar de gespecificeerde entiteit verwijzen. Deze functie moet worden uitgevoerd in de context van de masterdatabase om een serverniveau DDL-trigger als referentie-entiteit terug te geven.

Je kunt deze dynamische beheerfunctie gebruiken om te rapporteren over de volgende typen entiteiten in de huidige database die naar de gespecificeerde entiteit verwijzen:

  • Schema-gebonden of niet-schema-gebonden entiteiten

  • DDL-triggers op databaseniveau

  • Serverniveau DDL-triggers

Van toepassing op: SQL Server (SQL Server 2008 (10.0.x) en later), SQL Database.

Transact-SQL syntaxis-conventies

Syntaxis

sys.dm_sql_referencing_entities (  
    ' schema_name.referenced_entity_name ' , ' <referenced_class> ' )  
  
<referenced_class> ::=  
{  
    OBJECT  
  | TYPE  
  | XML_SCHEMA_COLLECTION  
  | PARTITION_FUNCTION  
}  

Arguments

schema_name.referenced_entity_name Is de naam van de genoemde entiteit.

schema_name is verplicht, behalve wanneer de genoemde cursus PARTITION_FUNCTION.

schema_name.referenced_entity_nameis Nvarchar(517).

<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } Is de klasse van de gerefereerde entiteit. Per statement kan slechts één klasse worden opgegeven.

<referenced_class> is nvarchar(60).

Tabel geretourneerd

Kolomnaam Gegevenstype Description
referencing_schema_name sysname Schema waarin de verwijzende entiteit thuishoort. Is null-waarde.

NULL voor database- en serverniveau DDL-triggers.
referencing_entity_name sysname Naam van de verwijzende entiteit. Is niet nulbaar.
referencing_id int ID van de verwijzende entiteit. Is niet nulbaar.
referencing_class tinyint Klasse van de verwijzende entiteit. Is niet nulbaar.

1 = Object

12 = DDL-trigger op databaseniveau

13 = Server-niveau DDL-trigger
referencing_class_desc nvarchar(60) Beschrijving van de klasse van referentie-entiteit.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER
is_caller_dependent bit Geeft aan dat de resolutie van de verwezen entiteit-ID tijdens run plaatsvindt omdat deze afhangt van het schema van de aanroeper.

1 = De verwijzende entiteit heeft het potentieel om naar de entiteit te verwijzen; echter, de resolutie van de verwezen entiteits-ID is afhankelijk van de aanroeper en kan niet worden bepaald. Dit gebeurt alleen voor niet-schema-gebonden verwijzingen naar een opgeslagen procedure, uitgebreide opgeslagen procedure of door de gebruiker gedefinieerde functie die in een uitvoerende instructie wordt aangeroepen.

0 = De gerefereerde entiteit is niet afhankelijk van de aanroeper.

Exceptions

Geeft een lege resultaatset terug onder een van de volgende voorwaarden:

  • Er wordt een systeemobject gespecificeerd.

  • De gespecificeerde entiteit bestaat niet in de huidige database.

  • De gespecificeerde entiteit verwijst niet naar entiteiten.

  • Er wordt een ongeldige parameter doorgegeven.

Geeft een foutmelding wanneer de gespecificeerde verwijzingsentiteit een genummerde opgeslagen procedure is.

Opmerkingen

De volgende tabel geeft een overzicht van de typen entiteiten waarvoor afhankelijkheidsinformatie wordt aangemaakt en onderhouden. Afhankelijkheidsinformatie wordt niet aangemaakt of onderhouden voor regels, standaardinstellingen, tijdelijke tabellen, tijdelijke opgeslagen procedures of systeemobjecten.

Entiteitstype Referentie-entiteit Referentie entiteit
Table Ja* Yes
Bekijk Yes Yes
Transact-SQL opgeslagen procedure** Yes Yes
CLR stored procedure Nee. Yes
Transact-SQL door de gebruiker gedefinieerde functie Yes Yes
CLR-gebruikersgedefinieerde functie Nee. Yes
CLR-trigger (DML en DDL) Nee. Nee.
Transact-SQL DML-trigger Yes Nee.
Transact-SQL database-niveau DDL-trigger Yes Nee.
Transact-SQL serverniveau DDL-trigger Yes Nee.
Uitgebreide opgeslagen procedures Nee. Yes
Wachtrij Nee. Yes
Synoniem Nee. Yes
Type (alias en CLR-door de gebruiker gedefinieerd type) Nee. Yes
XML-schemaverzameling Nee. Yes
Partitionfunctie Nee. Yes

* Een tabel wordt alleen als referentie-entiteit gevolgd wanneer deze verwijst naar een Transact-SQL module, door de gebruiker gedefinieerd type of XML-schemaverzameling in de definitie van een berekende kolom, CHECK-beperking of DEFAULT-beperking.

** Genummerde opgeslagen procedures met een geheel getal groter dan 1 worden niet gevolgd als referentie- of referentieentiteit.

Permissions

SQL Server 2008 (10.0.x) - SQL Server 2012 (11.x)

  • Vereist CONTROL-toestemming voor het verwezen object. Wanneer de entiteit waarnaar wordt verwezen een partitiefunctie is, is CONTROL-machtiging voor de database vereist.

  • Vereist SELECT-toestemming op sys.dm_sql_referencing_entities. Select-machtigingen worden standaard verleend aan het publiek.

SQL Server 2014 (12.x) en later

  • Vereist geen rechten voor het gerefereerde object. Gedeeltelijke resultaten kunnen worden teruggegeven als de gebruiker VIEW DEFINITION heeft op slechts enkele van de referentie-entiteiten.

  • Vereist VIEW DEFINITION op het object wanneer de referentie-entiteit een object is.

  • Vereist VIEW DEFINITION op de database wanneer de refererende entiteit een databaseniveau DDL-trigger is.

  • Vereist VIEW ANY DEFINITION op de server wanneer de refererende entiteit een serverniveau DDL-trigger is.

Voorbeelden

Eén. Het teruggeven van de entiteiten die naar een bepaalde entiteit verwijzen

Het volgende voorbeeld geeft de entiteiten in de huidige database terug die verwijzen naar de gespecificeerde tabel.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');  
GO  

B. Het teruggeven van de entiteiten die verwijzen naar een gegeven type

Het volgende voorbeeld geeft de entiteiten terug die verwijzen naar het aliastype dbo.Flag. De resultaatset toont aan dat twee opgeslagen procedures dit type gebruiken. Het dbo.Flag type wordt ook gebruikt bij de definitie van meerdere kolommen in de HumanResources.Employee tabel; omdat het type echter niet in de definitie van een berekende kolom, CHECK-beperking of DEFAULT-beperking in de tabel voorkomt, worden er geen rijen voor de HumanResources.Employee tabel teruggegeven.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');  
GO  

Hier is het resultatenoverzicht.

referencing_schema_name referencing_entity_name   referencing_id referencing_class_desc is_caller_dependent  
----------------------- -------------------------  ------------- ---------------------- -------------------  
HumanResources          uspUpdateEmployeeHireInfo  1803153469    OBJECT_OR_COLUMN       0  
HumanResources          uspUpdateEmployeeLogin     1819153526    OBJECT_OR_COLUMN       0  
(2 row(s) affected)`  

Zie ook

sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_afhankelijkheden (Transact-SQL)