Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Geeft één rij terug voor elke door de gebruiker gedefinieerde entiteit die bij naam wordt aangeduid in de definitie van de gespecificeerde referentie-entiteit in SQL Server. Er ontstaat een afhankelijkheid tussen twee entiteiten wanneer één door de gebruiker gedefinieerde entiteit, de zogenaamde referentie-entiteit, bij naam verschijnt in een behouden SQL-expressie van een andere door de gebruiker gedefinieerde entiteit, de zogenaamde referentie-entiteit. Als bijvoorbeeld een opgeslagen procedure de gespecificeerde referentie-entiteit is, geeft deze functie alle door de gebruiker gedefinieerde entiteiten terug die in de opgeslagen procedure worden genoemd, zoals tabellen, weergaven, door de gebruiker gedefinieerde types (UDT's) of andere opgeslagen procedures.
U kunt deze dynamische beheerfunctie gebruiken om te rapporteren over de volgende typen entiteiten waarnaar wordt verwezen door de gespecificeerde referentie-entiteit:
Schema-gebonden entiteiten
Niet-schema-gebonden entiteiten
Cross-database en cross-server entiteiten
Kolomniveau-afhankelijkheden van schema-gebonden en niet-schema-gebonden entiteiten
Door de gebruiker gedefinieerde types (alias en CLR UDT)
XML-schemaverzamelingen
Partitiefuncties
Syntaxis
sys.dm_sql_referenced_entities (
' [ schema_name. ] referencing_entity_name ' ,
' <referencing_class> ' )
<referencing_class> ::=
{
OBJECT
| DATABASE_DDL_TRIGGER
| SERVER_DDL_TRIGGER
}
Arguments
[ schema_name. ] referencing_entity_name
Is de naam van de verwijzende entiteit.
schema_name is vereist wanneer de referentieklasse OBJECT is.
schema_name.referencing_entity_name is nvarchar(517).
<referencing_class> ::= { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }
Is de klasse van de gespecificeerde referentie-entiteit. Per statement kan slechts één klasse worden opgegeven.
<referencing_class> is nvarchar(60).
Tabel geretourneerd
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| referencing_minor_id | int | Kolom-ID wanneer de verwijzende entiteit een kolom is; anders 0. Is niet nulbaar. |
| referenced_server_name | sysname | Naam van de server van de genoemde entiteit. Deze kolom wordt gevuld voor cross-serverafhankelijkheden die worden gemaakt door een geldige vierdelige naam te specificeren. Voor informatie over meervoudige namen, zie Transact-SQL syntaxisconventies. NULL voor niet-schema-gebonden afhankelijkheden waarvoor de entiteit werd verwezen zonder een vierdelige naam te specificeren. NULL voor schema-gebonden entiteiten omdat ze in dezelfde database moeten zitten en daarom alleen kunnen worden gedefinieerd met een tweedelige (schema.object) naam. |
| referenced_database_name | sysname | Naam van de database van de genoemde entiteit. Deze kolom wordt gevuld voor cross-database- of cross-serverreferenties die worden gemaakt door een geldige drie- of vierdelige naam te specificeren. NULL voor niet-schema-gebonden referenties wanneer gespecificeerd met een naam van één of twee delen. NULL voor schema-gebonden entiteiten omdat ze in dezelfde database moeten zitten en daarom alleen kunnen worden gedefinieerd met een tweedelige (schema.object) naam. |
| referenced_schema_name | sysname | Schema waarin de verwezen entiteit thuishoort. NULL voor niet-schema-gebonden referenties waarin de entiteit werd genoemd zonder de schemanaam te specificeren. Nooit NULL voor schema-gebonden referenties. |
| referenced_entity_name | sysname | Naam van de genoemde entiteit. Is niet nulbaar. |
| referenced_minor_name | sysname | Kolomnaam wanneer de verwezen entiteit een kolom is; anders NULL. Bijvoorbeeld, referenced_minor_name is NULL in de rij die de genoemde entiteit zelf vermeldt. Een referentiede entiteit is een kolom wanneer een kolom wordt geïdentificeerd met naam in de referentie-entiteit, of wanneer de moederentiteit wordt gebruikt in een SELECT * statement. |
| referenced_id | int | ID van de genoemde entiteit. Wanneer referenced_minor_id niet 0 is, is referenced_id de entiteit waarin de kolom is gedefinieerd. Altijd NULL voor cross-server referenties. NULL voor cross-database referenties wanneer de ID niet kan worden bepaald omdat de database offline is of de entiteit niet kan worden gebonden. NULL voor referenties binnen de database als de ID niet kan worden bepaald. Voor niet-schema-gebonden referenties kan de ID niet worden opgelost wanneer de gerefereerde entiteit niet in de database bestaat of wanneer de naamresolutie afhankelijk is van de aanroeper. In het laatste geval wordt is_caller_dependent op 1 gezet. Nooit NULL voor schema-gebonden referenties. |
| referenced_minor_id | int | Kolom-ID wanneer de verwezen entiteit een kolom is; anders 0. Bijvoorbeeld, referenced_minor_is is 0 in de rij die de genoemde entiteit zelf vermeldt. Voor niet-schema-gebonden referenties worden kolomafhankelijkheden alleen gerapporteerd wanneer alle gerefereerde entiteiten kunnen worden gebonden. Als een verwezen entiteit niet kan worden gebonden, worden er geen kolomniveau-afhankelijkheden gerapporteerd en is referenced_minor_id 0. Zie voorbeeld D. |
| referenced_class | tinyint | Klasse van de verwezen entiteit. 1 = Object of kolom 6 = Type 10 = XML-schemaverzameling 21 = Partitiefunctie |
| referenced_class_desc | nvarchar(60) | Beschrijving van de klasse van de gerefereerde entiteit. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
| is_caller_dependent | bit | Geeft aan dat schemabinding voor de gerefereerde entiteit tijdens run plaatsvindt; daarom hangt de resolutie van de entiteits-ID af van het schema van de aanroeper. Dit gebeurt wanneer de verwezen entiteit een opgeslagen procedure, uitgebreide opgeslagen procedure of een door de gebruiker gedefinieerde functie is die binnen een uitvoerbare instructie wordt aangeroepen. 1 = De gerefereerde entiteit is afhankelijk van de aanroeper en wordt tijdens uitvoering opgelost. In dit geval is referenced_id NULL. 0 = De verwezen entiteit-ID is niet afhankelijk van de aanroeper. Altijd 0 voor schema-gebonden referenties en voor cross-database- en cross-serverreferenties die expliciet een schemanaam specificeren. Bijvoorbeeld, een verwijzing naar een entiteit in het formaat EXEC MyDatabase.MySchema.MyProc is niet afhankelijk van de aanroeper. Een referentie in het formaat EXEC MyDatabase..MyProc is echter afhankelijk van de aanroeper. |
| is_ambiguous | bit | Geeft aan dat de referentie ambigu is en tijdens runtime kan worden opgelost naar een door de gebruiker gedefinieerde functie, een door de gebruiker gedefinieerd type (UDT), of een xquery-referentie naar een kolom van het type xml. Stel bijvoorbeeld dat de instructie SELECT Sales.GetOrder() FROM Sales.MySales is gedefinieerd in een opgeslagen procedure. Totdat de opgeslagen procedure is uitgevoerd, is het niet bekend of Sales.GetOrder() er een door de gebruiker gedefinieerde functie in het Sales schema of kolom met de naam Sales UDT is met een methode genaamd GetOrder().1 = Verwijzing naar een door de gebruiker gedefinieerde functie of kolom door het gebruik gedefinieerde type (UDT) methode is dubbelzinnig. 0 = De referentie is ondubbelzinnig of de entiteit kan succesvol worden gebonden wanneer de functie wordt aangeroepen. Altijd 0 voor schema-gebonden referenties. |
| is_selected | bit | 1 = Het object of de kolom wordt geselecteerd. |
| is_updated | bit | 1 = Het object of de kolom wordt aangepast. |
| is_select_all | bit | 1 = Het object wordt gebruikt in een SELECT * clausule (alleen objectniveau). |
| is_all_columns_found | bit | 1 = Alle kolomafhankelijkheden voor het object konden worden gevonden. 0 = Kolomafhankelijkheden voor het object konden niet worden gevonden. |
| is_insert_all | bit | 1 = Het object wordt gebruikt in een INSERT-instructie zonder kolomlijst (alleen objectniveau). Deze kolom is toegevoegd in SQL Server 2016. |
| is_incomplete | bit | 1 = Het object of de kolom heeft een bindingsfout en is onvolledig. Deze kolom is toegevoegd in SQL Server 2016 SP2. |
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 referentie-entiteit een genummerde opgeslagen procedure is.
Geeft fout 2020 terug wanneer kolomafhankelijkheden niet kunnen worden opgelost. Deze fout voorkomt niet dat de query objectniveau-afhankelijkheden teruggeeft.
Opmerkingen
Deze functie kan worden uitgevoerd in de context van elke database om de entiteiten terug te geven die verwijzen naar een serverniveau DDL-trigger.
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
Vereist SELECT-machtiging voor sys.dm_sql_referenced_entities- en VIEW DEFINITION-machtiging voor de verwijzende entiteit. Select-machtigingen worden standaard verleend aan het publiek. Vereist VIEW DEFINITION-machtiging voor de database of ALTER DATABASE DDL TRIGGER-machtiging voor de database wanneer de verwijzingsentiteit een DDL-trigger op databaseniveau is. Vereist VIEW ANY DEFINITION-machtiging op de server wanneer de verwijzende entiteit een DDL-trigger op serverniveau is.
Voorbeelden
Eén. Returneren entiteiten die worden aangeduid door een databaseniveau DDL-trigger
Het volgende voorbeeld geeft de entiteiten (tabellen en kolommen) terug die worden aangeduid door de databaseniveau DDL-trigger ddlDatabaseTriggerLog.
USE AdventureWorks2022;
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. Geef entiteiten terug die door een object worden aangeduid
Het volgende voorbeeld geeft de entiteiten terug die worden aangeduid door de door de gebruiker gedefinieerde functie dbo.ufnGetContactInformation.
USE AdventureWorks2022;
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. Retourkolomafhankelijkheden
Het volgende voorbeeld creëert de tabel Table1 met de berekende kolom c gedefinieerd als de som van de kolommen a en b. De sys.dm_sql_referenced_entities weergave wordt dan geroepen. De weergave geeft twee rijen terug, één voor elke kolom die in de berekende kolom is gedefinieerd.
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
Hier is het resultatenoverzicht.
schema_name table_name referenced_column referencing_column
----------- ---------- ----------------- ------------------
dbo Table1 a c
dbo Table1 b c
D. Retourneren van niet-schema-gebonden kolomafhankelijkheden
Het volgende voorbeeld dropt Table1 en creëert Table2 en opgeslagen procedure Proc1. De procedure verwijst Table2 naar de niet-bestaande tabel Table1. De view sys.dm_sql_referenced_entities wordt uitgevoerd met de opgeslagen procedure gespecificeerd als de referentie-entiteit. De resultaatset toont één rij voor Table1 en 3 rijen voor Table2. Omdat Table1 niet bestaat, kunnen de kolomafhankelijkheden niet worden opgelost en wordt fout 2020 teruggegeven. De is_all_columns_found kolom geeft 0 terug om Table1 aan te geven dat er kolommen waren die niet ontdekt konden worden.
DROP TABLE IF EXISTS 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,
is_all_columns_found
FROM
sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
Hier is het resultatenoverzicht.
referenced_id table_name referenced_column_name is_all_columns_found
------------- ------------ ----------------------- --------------------
935674381 Table2 NULL 1
935674381 Table2 C1 1
935674381 Table2 C2 1
NULL Table1 NULL 0
Msg 2020, Level 16, State 1, Line 1
The dependencies reported for entity "dbo.Proc1" might not include
references to all columns. This is either because the entity
references an object that does not exist or because of an error
in one or more statements in the entity. Before rerunning the
query, ensure that there are no errors in the entity and that
all objects referenced by the entity exist.
E. Dynamisch afhankelijkheidsonderhoud aantonen
Dit voorbeeld E gaat ervan uit dat voorbeeld D is uitgevoerd. Voorbeeld E laat zien dat afhankelijkheden dynamisch worden onderhouden. Het voorbeeld doet het volgende:
- Maakt opnieuw aan,
Table1wat in Voorbeeld D is weggelaten. - Run Then
sys.dm_sql_referenced_entitieswordt opnieuw uitgevoerd met de opgeslagen procedure gespecificeerd als de referentie-entiteit.
De resultaatset toont aan dat beide tabellen, en hun respectievelijke kolommen gedefinieerd in de opgeslagen procedure, worden teruggegeven. Daarnaast geeft de is_all_columns_found kolom een 1 terug voor alle objecten en kolommen.
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,
is_all_columns_found
FROM
sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
DROP TABLE Table1, Table2;
DROP PROC Proc1;
GO
Hier is het resultatenoverzicht.
referenced_id table_name referenced_column_name is_all_columns_found
------------- ------------ ----------------------- --------------------
935674381 Table2 NULL 1
935674381 Table2 c1 1
935674381 Table2 c2 1
967674495 Table1 NULL 1
967674495 Table1 a 1
967674495 Table1 b 1
967674495 Table1 c 1
F. Terugkerend gebruik van objecten of kolommen
Het volgende voorbeeld geeft de objecten en kolomafhankelijkheden van de opgeslagen procedure HumanResources.uspUpdateEmployeePersonalInfoterug. Deze procedure werkt de kolommen NationalIDNumber, BirthDate,``MaritalStatus, en Gender van de Employee tabel bij op basis van een gespecificeerde BusinessEntityID waarde. Een andere opgeslagen procedure upsLogError wordt gedefinieerd in een TRY... CATCH-blok om eventuele uitvoeringsfouten vast te leggen. De is_selected, is_updated, en is_select_all kolommen geven informatie terug over hoe deze objecten en kolommen binnen het referentieobject worden gebruikt. De tabel en kolommen die zijn aangepast worden aangegeven met een 1 in de is_updated kolom. De BusinessEntityID kolom is alleen geselecteerd en de opgeslagen procedure uspLogError wordt noch geselecteerd noch gewijzigd.
USE AdventureWorks2022;
GO
SELECT
referenced_entity_name AS table_name,
referenced_minor_name AS column_name,
is_selected, is_updated, is_select_all
FROM
sys.dm_sql_referenced_entities(
'HumanResources.uspUpdateEmployeePersonalInfo',
'OBJECT')
;
Hier is het resultatenoverzicht.
table_name column_name is_selected is_updated is_select_all
------------- ------------------- ----------- ---------- -------------
uspLogError NULL 0 0 0
Employee NULL 0 1 0
Employee BusinessEntityID 1 0 0
Employee NationalIDNumber 0 1 0
Employee BirthDate 0 1 0
Employee MaritalStatus 0 1 0
Employee Gender 0 1 0
Zie ook
sys.dm_sql_referencing_entities (Transact-SQL)
sys.sql_expression_afhankelijkheden (Transact-SQL)