Dela via


sys.sql_expression_dependencies (Transact-SQL)

gäller för:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Innehåller en rad för varje efternamnsberoende för en användardefinierad entitet i den aktuella databasen. Detta omfattar beroenden mellan internt kompilerade, skalära användardefinierade funktioner och andra SQL Server-moduler. Ett beroende mellan två entiteter skapas när en entitet, kallad den refererade entiteten, visas efter namn i ett beständiga SQL-uttryck för en annan entitet som kallas refererande entitet. När en tabell till exempel refereras till i definitionen av en vy beror vyn, som refererande entitet, på tabellen, den refererade entiteten. Om tabellen tas bort är vyn oanvändbar.

Mer information finns i Scalar User-Defined Functions for In-Memory OLTP.

Du kan använda den här katalogvyn för att rapportera beroendeinformation för följande entiteter:

  • Schemabundna entiteter.

  • Icke-schemabundna entiteter.

  • Korsdatabas- och korsserverentiteter. Entitetsnamn rapporteras. Entitets-ID:n löses dock inte.

  • Beroenden på kolumnnivå för schemabundna entiteter. Beroenden på kolumnnivå för icke-schemabundna objekt kan returneras med hjälp av sys.dm_sql_referenced_entities.

  • DDL på servernivå utlöses i kontexten för huvuddatabasen.

Kolumnnamn Datatyp Beskrivning
referencing_id int ID för den refererande entiteten. Kan inte vara null.
referencing_minor_id int Kolumn-ID när den refererande entiteten är en kolumn. annars 0. Kan inte vara null.
referencing_class pytteliten Klass för den refererande entiteten.

1 = Objekt eller kolumn

12 = DDL-utlösare för databas

13 = DDL-utlösare för server

Kan inte vara null.
referencing_class_desc nvarchar(60) Beskrivning av klassen för refererande entitet.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Kan inte vara null.
is_schema_bound_reference bit 1 = Den refererade entiteten är schemabunden.

0 = Den refererade entiteten är inte schemabunden.

Kan inte vara null.
referenced_class pytteliten Klass för den refererade entiteten.

1 = Objekt eller kolumn

6 = Typ

10 = XML-schemasamling

21 = Partitionsfunktion

Kan inte vara null.
referenced_class_desc nvarchar(60) Beskrivning av klass för refererad entitet.

OBJECT_OR_COLUMN

TYP

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Kan inte vara null.
referenced_server_name sysname Namnet på servern för den refererade entiteten.

Den här kolumnen fylls i för beroenden mellan servrar som skapas genom att ange ett giltigt namn i fyra delar. Information om flerapartsnamn finns i Transact-SQL syntaxkonventioner.

NULL för icke-schemabundna entiteter som entiteten refererades till utan att ange ett namn i fyra delar.

NULL för schemabundna entiteter eftersom de måste finnas i samma databas och därför bara kan definieras med hjälp av ett tvådelade (schema.object) namn.
referenced_database_name sysname Namnet på databasen för den refererade entiteten.

Den här kolumnen fylls i för korsdatabas- eller korsserverreferenser som görs genom att ange ett giltigt namn i tre delar eller fyra delar.

NULL för icke-schemabundna referenser när det anges med ett endels- eller tvådelsnamn.

NULL för schemabundna entiteter eftersom de måste finnas i samma databas och därför bara kan definieras med hjälp av ett tvådelade (schema.object) namn.
referenced_schema_name sysname Schema där den refererade entiteten tillhör.

NULL för icke-schemabundna referenser där entiteten refererades utan att ange schemanamnet.

Aldrig NULL för schemabundna referenser eftersom schemabundna entiteter måste definieras och refereras med hjälp av ett tvådelade namn.
referenced_entity_name sysname Namnet på den refererade entiteten. Kan inte vara null.
referenced_id int ID för den refererade entiteten. Värdet för den här kolumnen är aldrig NULL för schemabundna referenser. Värdet för den här kolumnen är alltid NULL för korsserverreferenser och korsdatabasreferenser.

NULL för referenser i databasen om ID:t inte kan fastställas. För icke-schemabundna referenser kan ID:t inte lösas i följande fall:

Den refererade entiteten finns inte i databasen.

Schemat för den refererade entiteten beror på anroparens schema och löses vid körning. I det här fallet är is_caller_dependent inställt på 1.
referenced_minor_id int ID för den refererade kolumnen när referensentiteten är en kolumn. annars 0. Kan inte vara null.

En refererad entitet är en kolumn när en kolumn identifieras med namn i den refererande entiteten, eller när den överordnade entiteten används i en SELECT * -instruktion.
is_caller_dependent bit Anger att schemabindningen för den refererade entiteten sker vid körning. Därför beror lösningen på entitets-ID:t på uppringarens schema. Detta inträffar när den refererade entiteten är en lagrad procedur, en utökad lagrad procedur eller en icke-schemabunden användardefinierad funktion som anropas i en EXECUTE-instruktion.

1 = Den refererade entiteten är anroparberoende och löses vid körning. I det här fallet är referenced_id NULL.

0 = Det refererade entitets-ID:t är inte anroparberoende.

Alltid 0 för schemabundna referenser och för korsdatabas- och korsserverreferenser som uttryckligen anger ett schemanamn. Till exempel är en referens till en entitet i formatet EXEC MyDatabase.MySchema.MyProc inte anroparberoende. En referens i formatet EXEC MyDatabase..MyProc är dock anroparberoende.
is_ambiguous bit Anger att referensen är tvetydig och kan matcha vid körning till en användardefinierad funktion, en användardefinierad typ (UDT) eller en xquery-referens till en kolumn av typen xml-.

Anta till exempel att instruktionen SELECT Sales.GetOrder() FROM Sales.MySales definieras i en lagrad procedur. Innan den lagrade proceduren har körts är det inte känt om Sales.GetOrder() är en användardefinierad funktion i Sales-schemat eller kolumnen med namnet Sales av typen UDT med en metod med namnet GetOrder().

1 = Referensen är tvetydig.

0 = Referensen är entydig eller så kan entiteten bindas när vyn anropas.

Alltid 0 för schemabundna referenser.

Anmärkningar

I följande tabell visas de typer av entiteter för vilka beroendeinformation skapas och underhålls. Beroendeinformation skapas eller underhålls inte för regler, standardvärden, temporära tabeller, tillfälliga lagrade procedurer eller systemobjekt.

Not

Azure Synapse Analytics och Parallel Data Warehouse stöder tabeller, vyer, filtrerad statistik och Transact-SQL lagrade procedurer från den här listan. Beroendeinformation skapas och underhålls endast för tabeller, vyer och filtrerad statistik.

Entitetstyp Referera till entitet Refererad entitet
Bord Ja* Ja
Utsikt Ja Ja
Filtrerat index Ja** Nej
Filtrerad statistik Ja** Nej
Transact-SQL lagrad procedur*** Ja Ja
CLR-lagrad procedur Nej Ja
Transact-SQL användardefinierad funktion Ja Ja
Användardefinierad CLR-funktion Nej Ja
CLR-utlösare (DML och DDL) Nej Nej
Transact-SQL DML-utlösare Ja Nej
Transact-SQL DDL-utlösare på databasnivå Ja Nej
Transact-SQL DDL-utlösare på servernivå Ja Nej
Utökade lagrade procedurer Nej Ja
Nej Ja
Synonym Nej Ja
Typ (alias och CLR-användardefinierad typ) Nej Ja
XML-schemasamling Nej Ja
Partitionsfunktion Nej Ja

* En tabell spåras endast som en refererande entitet när den refererar till en Transact-SQL modul, användardefinierad typ eller XML-schemasamling i definitionen av en beräknad kolumn, CHECK-begränsning eller STANDARDvillkor.

** Varje kolumn som används i filterpredikatet spåras som en refererande entitet.

Numrerade lagrade procedurer med ett heltalsvärde större än 1 spåras inte som en refererande eller refererad entitet.

Behörigheter

Kräver VIEW DEFINITION-behörighet för databasen och SELECT-behörighet för sys.sql_expression_dependencies för databasen. Som standard beviljas SELECT-behörighet endast medlemmar i den db_owner fasta databasrollen. När behörigheterna SELECT och VIEW DEFINITION beviljas till en annan användare kan den beviljade användaren visa alla beroenden i databasen.

Exempel

A. Returnerar entiteter som refereras av en annan entitet

I följande exempel returneras de tabeller och kolumner som refereras i vyn Production.vProductAndDescription. Vyn beror på vilka entiteter (tabeller och kolumner) som returneras i kolumnerna referenced_entity_name och referenced_column_name.

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. Returnerar entiteter som refererar till en annan entitet

I följande exempel returneras de entiteter som refererar till tabellen Production.Product. De entiteter som returneras i kolumnen referencing_entity_name beror på tabellen Product.

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. Returnerar beroenden mellan databaser

I följande exempel returneras alla beroenden mellan databaser. Exemplet skapar först databasen db1 och två lagrade procedurer som refererar till tabeller i databaserna db2 och db3. Den sys.sql_expression_dependencies tabellen efterfrågas sedan för att rapportera beroenden mellan databaser mellan procedurerna och tabellerna. Observera att NULL returneras i kolumnen referenced_schema_name för den refererade entiteten t3 eftersom ett schemanamn inte angavs för den entiteten i definitionen av proceduren.

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  
  

Se även

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