Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Minden felhasználó által definiált entitáshoz egy sort ad vissza, amelyet a megadott hivatkozási entitás definíciójában az SQL Server definíciójában név szerint hivatkoznak. Két entitás közötti függőség akkor jön létre, amikor egy felhasználó által definiált entitás, az úgynevezett hivatkozott entitás, név szerint megjelenik egy másik felhasználó által definiált entitás, az úgynevezett referencia entitás, egy SQL kifejezőben megmaradva. Például, ha egy tárolt eljárás a megadott hivatkozási entitás, ez a függvény visszaadja az összes felhasználó által definiált entitást, amely a tárolt eljárásban hivatkozik, például táblákat, nézeteket, felhasználódefiniált típusokat (UDT-k) vagy más tárolt eljárásokat.
Ezt a dinamikus menedzsment funkciót használhatod a következő típusú entitásokról, amelyeket a megadott hivatkozási entitás hivatkoz, jelentést készíthetsz:
Séma-kötött entitások
Nem séma-kötött entitások
Adatbázis- és szerverre-ellen működő entitások
Oszlopszintű függőségek sémához kötött és nem séma-kötött entitásokhoz
Felhasználó által definiált típusok (alias és CLR UDT)
XML-sémagyűjtemények
Partíciófüggvények
Szemantika
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
Ez a hivatkozó entitás neve.
schema_name szükséges, ha a hivatkozó osztály OBJECT.
schema_name.referencing_entity_namenvarchar(517).
<referencing_class> ::= { OBJEKTUM | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }
Az adott referenciaentitás osztálya. Egy állításhoz csak egy osztály lehet megadni.
<referencing_class>nvarchar(60).
Visszaadott tábla
| Oszlop név | Adattípus | Description |
|---|---|---|
| referencing_minor_id | int | Oszlopazonosító, ha a hivatkozó entitás oszlop; egyébként 0. Nem lehet null értékű. |
| referenced_server_name | sysname | A hivatkozott entitás szerverének neve. Ez az oszlop szerverek közötti függőségekhez van feltöltve, amelyeket érvényes négyrészes név megjelölésével hoznak létre. A többrészes nevekről információért lásd Transact-SQL szintaxiskonvenciókat. NULL olyan nem séma-függőségeknél, amelyekhez az entitást négyrészes név megadása nélkül hivatkozták. NULL a séma-kötött entitások esetén, mert ugyanabban az adatbázisban kell lennie, ezért csak kétrészes (séma.objektum) néven definiálhatók. |
| referenced_database_name | sysname | A hivatkozott entitás adatbázisának neve. Ez az oszlop az adatbázisok vagy szerverek közötti hivatkozások számára van töltve, amelyeket egy érvényes, három- vagy négyrészes név megadásával készítenek. NULL a nem séma-kötött hivatkozásokhoz, ha egy- vagy kétrészes néven van megadva. NULL a séma-kötött entitások esetén, mert ugyanabban az adatbázisban kell lennie, ezért csak kétrészes (séma.objektum) néven definiálhatók. |
| referenced_schema_name | sysname | Séma, amelybe a hivatkozott entitás tartozik. NULL nem séma-kötött hivatkozásokhoz, amelyekben az entitást a séma név megadása nélkül használták. Soha ne NULL legyen a sémához kötött hivatkozásokhoz. |
| referenced_entity_name | sysname | A hivatkozott entitás neve. Nem lehet null értékű. |
| referenced_minor_name | sysname | Oszlop neve, ha a hivatkozott entitás oszlop; egyébként NULL. Például referenced_minor_name NULL abban a sorban, amely magát a hivatkozott entitást tartalmazza. A hivatkozott entitás olyan oszlop, amikor egy oszlopot név szerint azonosítanak a hivatkozó entitásban, vagy amikor az anya-entitást egy SELECT * utasításban használják. |
| referenced_id | int | A hivatkozott entitás azonosítója. Ha referenced_minor_id nem 0, akkor az referenced_id az entitás, amelyben az oszlop definiált. Mindig NULL a szerverek közötti hivatkozásokhoz. NULL az adatbázis-kereszthivatkozásokhoz, amikor az azonosító nem határozható meg, mert az adatbázis offline vagy az entitás nem köthető be. NULL az adatbázison belüli hivatkozásokhoz, ha az azonosító nem határozható meg. Nem séma-függő hivatkozások esetén az azonosító nem oldható meg, ha a hivatkozott entitás nem létezik az adatbázisban, vagy ha a név feloldása hívótól függ. Az utóbbi esetben is_caller_dependent 1-re van beállítva. Soha ne NULL legyen a sémához kötött hivatkozásokhoz. |
| referenced_minor_id | int | Oszlopazonosító, ha a hivatkozott entitás oszlop; egyébként 0. Például referenced_minor_is 0 abban a sorban, amely magát a hivatkozott entitást tartalmazza. Nem séma-kötött hivatkozások esetén az oszlopfüggőségeket csak akkor jelentik, ha minden hivatkozott entitás korlátozható. Ha bármely hivatkozott entitás nem lehet korlátozható, akkor nem jelentenek oszlopszintű függőséget, és referenced_minor_id 0. Lásd a D példát. |
| referenced_class | tinyint | Az említett entitás osztálya. 1 = Objektum vagy oszlop 6 = Típus 10 = XML sémagyűjtemény 21 = Partíciós függvény |
| referenced_class_desc | nvarchar(60) | A hivatkozott entitás osztályának leírása. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
| is_caller_dependent | bit | Jelzi, hogy a hivatkozott entitás sémakötése futásidőben történik; ezért az entitás azonosítójának feloldása a hívó sémájától függ. Ez akkor fordul elő, ha a hivatkozott entitás egy tárolt eljárás, kiterjesztett tárolt eljárás vagy egy EXECUTE utasításon belül meghívott felhasználó által definiált függvény. 1 = A hivatkozott entitás hívófüggő, és futásidőben oldódik. Ebben az esetben referenced_id NULL. 0 = A hivatkozott entitásazonosító nem függ a hívótól. Mindig 0 a séma-kötött hivatkozásoknál, valamint az adatbázis- és szerverek közötti hivatkozásoknál, amelyek kifejezetten megadják a séma nevet. Például egy entitásra vonatkozó hivatkozás a formátumban EXEC MyDatabase.MySchema.MyProc nem hívótól függ. Azonban a formátumban EXEC MyDatabase..MyProc szereplő hivatkozás hívótól függ. |
| is_ambiguous | bit | Azt jelzi, hogy a hivatkozás kétértelmű, és futásidőben megoldható egy felhasználó által definiált függvényre, egy felhasználódefiniált típusra (UDT) vagy egy xquery hivatkozásra egy xml típusú oszlopra. Például tegyük fel, hogy az állítás SELECT Sales.GetOrder() FROM Sales.MySales egy tárolt eljárásban van definiálva. Amíg a tárolt eljárás el nem hajtják végre, nem tudni, hogy a sémában felhasználó által definiált függvény van-e Sales.GetOrder() vagy UDT típusú oszlopSales, amelynek nevű metódusa GetOrder().Sales1 = Egy felhasználó által definiált függvényre vagy oszlop felhasználó-definiált típusra (UDT) való hivatkozás kétértelmű. 0 = A hivatkozás egyértelmű, vagy az entitás sikeresen korlátozható, amikor a függvényt meghívják. Mindig 0 a sémákhoz kötött hivatkozásoknál. |
| is_selected | bit | 1 = A tárgy vagy oszlop ki van választva. |
| is_updated | bit | 1 = Az objektum vagy oszlop módosított. |
| is_select_all | bit | 1 = Az objektumot egy SELECT * klauzulában használják (csak objektum szinten). |
| is_all_columns_found | bit | 1 = Az objektum összes oszlopfüggősége megtalálható. 0 = Az objektum oszlopfüggőségei nem voltak megtalálhatók. |
| is_insert_all | bit | 1 = Az objektum egy INSERT utasításban jelenik meg oszloplista nélkül (csak objektum szinten). Ezt az oszlopot az SQL Server 2016-ban adták fel. |
| is_incomplete | bit | 1 = Az objektum vagy oszlop kötési hibát mutat be, és hiányos. Ezt az oszlopot az SQL Server 2016 SP2-ben adták fel. |
Exceptions
Üres eredményhalmazt ad vissza az alábbi feltételek bármelyike esetén:
Rendszerobjektum van megadva.
A megadott entitás nem létezik a jelenlegi adatbázisban.
A megadott entitás nem hivatkozik semmilyen entitásra.
Egy érvénytelen paramétert továbbítunk.
Hibát ad vissza, ha a megadott hivatkozási entitás számozott tárolt eljárás.
A 2020-as hibát adja vissza, ha az oszlopfüggőségek nem oldhatók meg. Ez a hiba nem akadályozza meg a lekérdezést abban, hogy objektumszintű függőségeket adjon vissza.
Megjegyzések
Ez a függvény bármely adatbázis kontextusában végrehajtható, hogy visszaadja azokat az entitásokat, amelyek egy szerverszintű DDL triggerre hivatkoznak.
Az alábbi táblázat felsorolja azokat az entitástípusokat, amelyekhez a függőségi információkat hozják létre és karbantartják. Függőségi információkat nem hoznak létre vagy karbantartanak szabályokhoz, alapértelmezettekhez, ideiglenes táblákhoz, ideiglenes tárolt eljárásokhoz vagy rendszerobjektumokhoz.
| Entitástípus | Referencing entity | Hivatkozott entitás |
|---|---|---|
| Táblázat | Igen* | Igen |
| View | Igen | Igen |
| Transact-SQL tárolt eljárás** | Igen | Igen |
| CLR tárolt eljárás | Nem | Igen |
| Transact-SQL felhasználó által definiált függvény | Igen | Igen |
| CLR felhasználó által definiált függvény | Nem | Igen |
| CLR trigger (DML és DDL) | Nem | Nem |
| Transact-SQL DML trigger | Igen | Nem |
| Transact-SQL adatbázis-szintű DDL trigger | Igen | Nem |
| Transact-SQL szerver szintű DDL trigger | Igen | Nem |
| Kiterjesztett tárolt eljárások | Nem | Igen |
| Várólista | Nem | Igen |
| Szinonima | Nem | Igen |
| Típus (alias és CLR felhasználó által definiált típus) | Nem | Igen |
| XML séma gyűjtemény | Nem | Igen |
| Partíciós függvény | Nem | Igen |
* Egy táblázatot csak akkor követnek referenciaentitásként, ha egy Transact-SQL modulra, felhasználó által definiált típusra vagy XML sémagyűjteményre hivatkozik egy számított oszlop, CHECK korlátozás vagy DEFAULT korlátozás definíciójában.
** Az egész szám értékű 1-nél nagyobb számú tárolt eljárásokat nem követik sem hivatkozó, sem hivatkozott entitásként.
Permissions
SELECT engedélyre van szükség a sys.dm_sql_referenced_entities-hez és VIEW DEFINITION engedélyre a hivatkozó entitáson. Alapértelmezés szerint a SELECT engedély nyilvános. View DEFINITION-engedély szükséges az adatbázishoz vagy az ALTER DATABASE DDL TRIGGER engedélyéhez az adatbázisban, ha a hivatkozási entitás adatbázisszintű DDL-eseményindító. A VIEW ANY DEFINITION engedélyre van szükség a kiszolgálón, ha a hivatkozási entitás kiszolgálószintű DDL-trigger.
Példák
A. Olyan entitások, amelyeket adatbázis-szintű DDL trigger hivatkoz vissza
A következő példa adja vissza azokat az entitásokat (táblákat és oszlopokat), amelyeket az adatbázis-szintű DDL trigger ddlDatabaseTriggerLoghivatkoz.
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. Vissza olyan entitások, amelyeket egy objektum hivatkozik
A következő példa adja vissza azokat az entitásokat, amelyeket a felhasználó által definiált függvény dbo.ufnGetContactInformationhivatkozik .
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. Vissza oszlopfüggőségek
A következő példa létrehozza a táblázatot Table1 , amelynek kiszámított oszlopa ca oszlopok és baz összessége alapján definiálja. A sys.dm_sql_referenced_entities kilátás ekkor szól. A nézet két sort ad vissza, egyet minden oszlophoz, amely a számított oszlopban definiált.
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
Itt van az eredmények összessége.
schema_name table_name referenced_column referencing_column
----------- ---------- ----------------- ------------------
dbo Table1 a c
dbo Table1 b c
D. Nem séma-kötött oszlopfüggőségek visszaadása
A következő példa eldobja Table1 , létrehozza Table2 és tárolja az eljárást Proc1. Az eljárás hivatkozásai Table2 és a nem létező tábla Table1. A nézetet sys.dm_sql_referenced_entities a tárolt eljárás a hivatkozó entitásként jelölve futtatják. Az eredményhalmaz egy sort és Table1 3 sort mutatja .Table2 Mivel Table1 nem létezik, az oszlopfüggőségek nem oldhatók meg, és a 2020-as hiba visszatér. Az is_all_columns_found oszlop 0-t ad vissza, jelezve Table1 , hogy voltak olyan oszlopok, amelyeket nem lehetett felfedezni.
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
Itt van az eredmények összessége.
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. Dinamikus függőségfenntartás bemutatása
Ez az E példa feltételezi, hogy D példát lefuttatták. Az E példa azt mutatja, hogy a függőségek dinamikusan fennmaradnak. A példa a következőket teszi el:
- Újrateremti
Table1, amit a D példában hagytak ki. - A Run Then
sys.dm_sql_referenced_entitiesújra fut, a tárolt eljárást jelölve referencia entitásként.
Az eredményhalmaz azt mutatja, hogy mindkét tábla és a tárolt eljárásban meghatározott oszlopok visszakerülnek. Ezen felül az is_all_columns_found oszlop minden objektumra és oszlopra 1-et ad vissza.
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
Itt van az eredmények összessége.
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. Objektum- vagy oszlophasználat visszaküldése
A következő példa adja vissza a tárolt eljárás HumanResources.uspUpdateEmployeePersonalInfoobjektumait és oszlopfüggőségét. Ez az eljárás frissíti NationalIDNumbera tábla oszlopait , BirthDate,``MaritalStatus, és GenderEmployee egy meghatározott BusinessEntityID érték alapján. Egy másik tárolt eljárás upsLogError egy TRY-ben van definiálva... CATCH blokk, hogy rögzítse az esetleges végrehajtási hibákat. Az is_selected, is_updated, és is_select_all oszlopok információt adnak arról, hogyan használják ezeket az objektumokat és oszlopokat a hivatkozási objektumon belül. A módosított táblázatot és oszlopokat egy 1-es jelzéssel jelölik a is_updated oszlopban. Az BusinessEntityID oszlopot csak kiválasztják, és a tárolt eljárást uspLogError sem kiválasztják, sem módosítják.
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')
;
Itt van az eredmények összessége.
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
Lásd még:
sys.dm_sql_referencing_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)