sys.sql_expression_dependencies (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzureSQL Managed InstanceAzureSynapse AnalyticsSQLanalytics endpoint in Microsoft FabricWarehousein 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. A szervezetek nevei jelenthetők; azonban az entitás azonosítók nem oldódnak meg.

  • 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 szerverszintű DDL trigger, amikor az master adatbázis kontextusában van.

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

1 = Objektum vagy oszlop
12 = Adatbázis DDL trigger
13 = Szerver DDL trigger

Nem nullázható.
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ázható.
is_schema_bound_reference bit 1 = A hivatkozott entitás sémához kötött.
0 = A hivatkozott entitás nem sémához kötött.

Nem nullázható.
referenced_class apró A hivatkozott entitás osztálya.

1 = Objektum vagy oszlop
6 = Típus
7 = Index
10 = XML sémagyűjtemény
21 = Partíciós függvény

Nem nullázható.
referenced_class_desc nvarchar(60) A hivatkozott entitás osztályának leírása.

OBJECT_OR_COLUMN
TYPE
INDEX
XML_SCHEMA_COLLECTION
PARTITION_FUNCTION

Nem nullázható.
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 nem sémához kötött entitásokra, amelyekhez az entitást négyrészes név megadása nélkül hivatkozták.

NULL sémához kötött entitások esetén, mert ugyanabban az adatbázisban kell legyenek, így 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 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 nem séma-kötött hivatkozásokhoz, ha egy- vagy kétrészes néven van megadva.

NULL sémához kötött entitások esetén, mert ugyanabban az adatbázisban kell legyenek, így csak kétrészes (séma.tárgy) név.
referenced_schema_name sysname Séma, amelyhez 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 NULL nem a séma-kötött hivatkozásoknál, mert a séma-kötött entitásokat kétrészes név használatával kell definiálni és hivatkozni.
referenced_entity_name sysname A hivatkozott entitás neve. Nem nullázható.
referenced_id A hivatkozott entitás azonosítója. Ennek az oszlopnak az értéke soha NULL nem vonatkozik sémához kötött hivatkozásokra. Ennek az oszlopnak az értéke mindig NULL szerver- és adatbázis-hivatkozásokra vonatkozik.

NULL az adatbázison belüli hivatkozásokhoz, ha az azonosító nem határozható meg. Nem séma-kötött hivatkozások esetén az ID nem oldható meg az alábbi 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ázható.

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 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é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 entitásra vonatkozó hivatkozás a formátumban EXEC MyDatabase.MySchema.MyProc nem függ a hívótól. A EXEC MyDatabase..MyProc formátumú hivatkozás azonban hívó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ó által definiált típusra (UDT) vagy egy XQuery hivatkozásra egy xml tí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. Amíg a tárolt eljárás el nem hajtják végre, nem ismert, hogy Sales.GetOrder() a sémában egy felhasználó által definiált függvény Sales vagy Sales oszlop van-e UDT típusú, egy metódussal .GetOrder()

1 = A hivatkozás kétértelmű.

0 = A hivatkozás egyértelmű, vagy az entitás sikeresen korlátozható, amikor a nézetet meghívják.

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. 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.

Jegyzet

Azure Synapse Analytics támogatja a táblákat, nézeteket, szűrt statisztikákat és Transact-SQL tárolt eljárástípusokat ebből a listából. 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 Igen1 Igen
Nézet Igen Igen
Szűrt index Igen2 Nem
Szűrt statisztikák Igen2 Nem
Transact-SQL tárolteljárás 3 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

1 Egy táblát 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 kiszámított oszlop, CHECK korlátozás vagy DEFAULT korlátozás definíciójában.

2 A szűrőpredikátumban használt oszlopot referencia entitásként követik.

3 Az egész szám értéküknél nagyobb 1-nél nagyobb számú tárolt eljárásokat sem hivatkozó, sem hivatkozott entitásként nem követik nyomon követést.

Engedélyek

Szükség VIEW van DEFINITION engedélyre az adatbázison és SELECT sys.sql_expression_dependencies engedélyt az adatbázisban. 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 VIEW a DEFINITION engedélyeket egy másik felhasználó kapja meg, a jogosult megtekintheti az adatbázisban lévő összes függőséget.

Példák

Egy. Visszatérítési entitások, amelyeket más entitás hivatkozik

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');

B. Visszatérítési entitások, amelyek más entitásra hivatkoznak

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');

C. Keresztadatbázis-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. NULLvisszaadja a hivatkozott entitás referenced_schema_name oszlopábant3, mert az eljárás definíciójában nincs megadva séma neve az adott entitásra.

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;