Megosztás a következőn keresztül:


sys.sql_expression_dependencies (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-végpont a Microsoft FabricWarehouse-ban a Microsoft Fabric

Egy sort tartalmaz az aktuális adatbázisban lévő, felhasználó által definiált entitás minden egyes névfüggőségéhez. Ez magában foglalja a natívan lefordított, a skaláris felhasználó által definiált függvények és más SQL Server-modulok közötti függőségeket. Két entitás közötti függőség akkor jön létre, ha az egyik entitás, az úgynevezett hivatkozott entitás, név szerint jelenik meg egy másik entitás egy megőrzött SQL-kifejezésében, az úgynevezett hivatkozó entitás. Ha például egy tábla egy nézet definíciójában szerepel, a nézet hivatkozási entitásként a táblától, a hivatkozott entitástól függ. Ha a tábla el van dobva, a nézet használhatatlan.

További információ: Skaláris User-Defined Functions for In-Memory OLTP.

Ez a katalógusnézet a következő entitások függőségi adatainak jelentésére használható:

  • Sémaalapú entitások.

  • Nem sémaalapú entitások.

  • Adatbázisközi és kiszolgálóközi entitások. Az entitásnevek jelentése; az entitásazonosítók azonban nem oldódnak fel.

  • Oszlopszintű függőségek sémaalapú entitásokon. A nem sémához kötött objektumok oszlopszintű függőségei sys.dm_sql_referenced_entitieshasználatával adhatóak vissza.

  • A kiszolgálószintű DDL a főadatbázis kontextusában aktiválódik.

Oszlop neve Adattípus Leírás
referencing_id A hivatkozó entitás azonosítója. Nem null értékű.
referencing_minor_id Oszlopazonosító, ha a hivatkozási entitás oszlop; egyéb esetben 0. Nem null értékű.
referencing_class apró A hivatkozó entitás osztálya.

1 = Objektum vagy oszlop

12 = Adatbázis DDL-eseményindítója

13 = kiszolgálói DDL-eseményindító

Nem null értékű.
referencing_class_desc nvarchar(60) A hivatkozási entitás osztályának leírása.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Nem null értékű.
is_schema_bound_reference bit 1 = A hivatkozott entitás sémakötésű.

0 = A hivatkozott entitás nem sémaalapú.

Nem null értékű.
referenced_class apró A hivatkozott entitás osztálya.

1 = Objektum vagy oszlop

6 = Típus

10 = XML-sémagyűjtemény

21 = Partíció függvény

Nem null értékű.
referenced_class_desc nvarchar(60) A hivatkozott entitás osztályának leírása.

OBJECT_OR_COLUMN

TÍPUS

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Nem null értékű.
referenced_server_name sysname A hivatkozott entitás kiszolgálójának neve.

Ez az oszlop egy érvényes négyrészes név megadásával ki van töltve a kiszolgálóközi függőségek esetében. A többrészes nevekről további információt Transact-SQL szintaxiskonvenciák.

NULL érték olyan nem sémaalapú entitásokhoz, amelyekre az entitás négyrészes név megadása nélkül hivatkozik.

NULL érték a sémaalapú entitások esetében, mert ugyanabban az adatbázisban kell lenniük, ezért csak kétrészes (schema.object) névvel definiálhatók.
referenced_database_name sysname A hivatkozott entitás adatbázisának neve.

Ez az oszlop adatbázisközi vagy kiszolgálóközi hivatkozásokhoz van feltöltve, amelyek egy érvényes háromrészes vagy négyrészes név megadásával jönnek létre.

NULL érték a nem sémaalapú hivatkozásokhoz, ha egy- vagy kétrészes névvel van megadva.

NULL érték a sémaalapú entitások esetében, mert ugyanabban az adatbázisban kell lenniük, ezért csak kétrészes (schema.object) névvel definiálhatók.
referenced_schema_name sysname Séma, amelyhez a hivatkozott entitás tartozik.

NULL érték azokhoz a nem sémaalapú hivatkozásokhoz, amelyekben az entitásra a sémanév megadása nélkül hivatkoztak.

Sémakötésű hivatkozásokhoz soha ne legyen NULL, mert a sémahoz kötött entitásokat kétrészes névvel kell definiálni és hivatkozni.
referenced_entity_name sysname A hivatkozott entitás neve. Nem null értékű.
referenced_id A hivatkozott entitás azonosítója. Ennek az oszlopnak az értéke soha nem NULL a sémához kötött hivatkozások esetében. Ennek az oszlopnak az értéke mindig NULL a többkiszolgálós és adatbázisközi hivatkozások esetében.

NULL érték az adatbázison belüli hivatkozásokhoz, ha az azonosító nem határozható meg. Nem sémaalapú hivatkozások esetén az azonosító nem oldható fel a következő esetekben:

A hivatkozott entitás nem létezik az adatbázisban.

A hivatkozott entitás sémája a hívó sémájától függ, és futásidőben lesz feloldva. Ebben az esetben a is_caller_dependent értéke 1.
referenced_minor_id A hivatkozott oszlop azonosítója, ha a hivatkozási entitás oszlop; egyéb esetben 0. Nem null értékű.

A hivatkozott entitás olyan oszlop, amely egy oszlopot név alapján azonosít a hivatkozási entitásban, vagy ha a szülő entitást egy SELECT * utasításban használja a rendszer.
is_caller_dependent bit Azt jelzi, hogy a hivatkozott entitás sémakötése futásidőben történik; Ezért az entitásazonosító 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, egy kiterjesztett tárolt eljárás vagy egy nem sémaalapú, felhasználó által definiált függvény, amelyet egy EXECUTE utasítás hív meg.

1 = A hivatkozott entitás hívófüggő, és futásidőben lesz feloldva. Ebben az esetben a referenced_id NULL értékű.

0 = A hivatkozott entitásazonosító nem hívófüggő.

Mindig 0 a sémaalapú hivatkozásokhoz, valamint az adatbázisközi és kiszolgálóközi hivatkozásokhoz, amelyek explicit módon megadják a séma nevét. Például egy EXEC MyDatabase.MySchema.MyProc formátumú entitásra mutató hivatkozás nem hívófüggő. A EXEC MyDatabase..MyProc formátumú hivatkozás azonban hívófüggő.
is_ambiguous bit Azt jelzi, hogy a hivatkozás nem egyértelmű, és futtatáskor feloldható felhasználó által definiált függvényre, felhasználó által definiált típusra (UDT) vagy xquery-hivatkozásra egy xmltípusú oszlopra.

Tegyük fel például, hogy a SELECT Sales.GetOrder() FROM Sales.MySales utasítás egy tárolt eljárásban van definiálva. A tárolt eljárás végrehajtásáig nem lehet tudni, hogy a Sales.GetOrder() felhasználó által definiált függvény-e a Sales UDT típusú Sales nevű sémában vagy oszlopban GetOrder()nevű metódussal.

1 = A hivatkozás nem egyértelmű.

0 = A hivatkozás nem egyértelmű, vagy az entitás sikeresen megköthető a nézet meghívásakor.

Mindig 0 a séma által kötött hivatkozásokhoz.

Megjegyzések

Az alábbi táblázat azokat az entitástípusokat sorolja fel, amelyekhez függőségi információkat hoz létre és tart fenn. A függőségi adatok nincsenek létrehozva vagy karbantartva szabályokhoz, alapértelmezett értékekhez, ideiglenes táblákhoz, ideiglenes tárolt eljárásokhoz vagy rendszerobjektumokhoz.

Jegyzet

Az Azure Synapse Analytics és a párhuzamos adattárház a listából támogatja a táblákat, nézeteket, szűrt statisztikákat és Transact-SQL tárolt eljárások entitástípusait. A függőségi adatok csak táblákhoz, nézetekhez és szűrt statisztikákhoz jönnek létre és tarthatók fenn.

Entitás típusa Hivatkozási entitás Hivatkozott entitás
Asztal Igen* Igen
Nézet Igen Igen
Szűrt index Igen** Nem
Szűrt statisztikák Igen** Nem
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-eseményindító (DML és DDL) Nem Nem
Transact-SQL DML-eseményindító Igen Nem
adatbázisszintű DDL-eseményindító Transact-SQL Igen Nem
Transact-SQL kiszolgálószintű DDL-eseményindító Igen Nem
Kiterjesztett tárolt eljárások Nem Igen
Sor Nem Igen
Szinonima Nem Igen
Típus (alias és CLR felhasználó által definiált típus) Nem Igen
XML-sémagyűjtemény Nem Igen
Partíciófüggvény Nem Igen

* A tábla csak akkor lesz hivatkozási entitásként nyomon követve, ha Transact-SQL modulra, felhasználó által definiált típusra vagy XML-sémagyűjteményre hivatkozik a számított oszlop, a CHECK vagy a DEFAULT korlátozás definíciójában.

** A szűrő predikátumában használt minden oszlop hivatkozási entitásként van nyomon követve.

Az 1-nél nagyobb egész számmal rendelkező számozott tárolt eljárásokat a rendszer nem hivatkozó vagy hivatkozott entitásként követi nyomon.

Engedélyek

A VIEW DEFINITION engedélyre van szükség az adatbázison, és SELECT engedélyt kell kérni az adatbázis sys.sql_expression_dependencies szolgáltatásához. Alapértelmezés szerint a SELECT engedély csak a db_owner rögzített adatbázis-szerepkör tagjai számára van megadva. Ha a SELECT és a VIEW DEFINITION engedélyeket egy másik felhasználó kapja meg, a jogosult megtekintheti az adatbázis összes függőségét.

Példák

Egy. Egy másik entitás által hivatkozott entitások visszaadása

Az alábbi példa a nézetben hivatkozott táblákat és oszlopokat adja vissza Production.vProductAndDescription. A nézet a referenced_entity_name és referenced_column_name oszlopokban visszaadott entitásoktól (tábláktól és oszlopoktól) függ.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_class_desc,  
    referenced_server_name, referenced_database_name, referenced_schema_name,  
    referenced_entity_name,   
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
    is_caller_dependent, is_ambiguous  
FROM sys.sql_expression_dependencies AS sed  
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');  
GO  
  

B. Egy másik entitásra hivatkozó entitások visszaadása

Az alábbi példa a Production.Producttáblára hivatkozó entitásokat adja vissza. A referencing_entity_name oszlopban visszaadott entitások a Product táblától függenek.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
    OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_class_desc, referenced_class_desc,  
    referenced_server_name, referenced_database_name, referenced_schema_name,  
    referenced_entity_name,   
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
    is_caller_dependent, is_ambiguous  
FROM sys.sql_expression_dependencies AS sed  
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
WHERE referenced_id = OBJECT_ID(N'Production.Product');  
GO  
  

C. Adatbázisközi függőségek visszaadása

Az alábbi példa az adatbázisközi függőségeket adja vissza. A példa először létrehozza az adatbázist db1 és két tárolt eljárást, amelyek az adatbázisok tábláira hivatkoznak db2 és db3. A sys.sql_expression_dependencies tábla ezután lekérdezve jelenti az eljárások és a táblák közötti adatbázisközi függőségeket. Figyelje meg, hogy a null érték a hivatkozott entitás referenced_schema_name oszlopában t3, mert az eljárás definíciójában nem adott meg sémanevet az adott entitáshoz.

CREATE DATABASE db1;  
GO  
USE db1;  
GO  
CREATE PROCEDURE p1 AS SELECT * FROM db2.s1.t1;  
GO  
CREATE PROCEDURE p2 AS  
    UPDATE db3..t3  
    SET c1 = c1 + 1;  
GO  
SELECT OBJECT_NAME (referencing_id),referenced_database_name,   
    referenced_schema_name, referenced_entity_name  
FROM sys.sql_expression_dependencies  
WHERE referenced_database_name IS NOT NULL;  
GO  
USE master;  
GO  
DROP DATABASE db1;  
GO  
  

Lásd még:

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