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. Enhetsnamn rapporteras; dock löses inte entitets-ID:n.

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

  • Servernivå-DDL triggas när den befinner sig i databasens master kontext.

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

1 = Objekt eller kolumn
12 = Databas DDL-trigger
13 = Server DDL-trigger

Inte nullbar.
referencing_class_desc nvarchar(60) Beskrivning av klassen för refererande entitet.

OBJECT_OR_COLUMN
DATABASE_DDL_TRIGGER
SERVER_DDL_TRIGGER

Inte nullbar.
is_schema_bound_reference bit 1 = Den refererade entiteten är schemabunden.
0 = Den refererade enheten är icke-schema-bunden.

Inte nullbar.
referenced_class pytteliten Klass för den refererade entiteten.

1 = Objekt eller kolumn
6 = Typ
7 = Index
10 = XML-schemasamling
21 = Partitionsfunktion

Inte nullbar.
referenced_class_desc nvarchar(60) Beskrivning av klass för refererad entitet.

OBJECT_OR_COLUMN
TYPE
INDEX
XML_SCHEMA_COLLECTION
PARTITION_FUNCTION

Inte nullbar.
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 enheter där entiteten refererades utan att specificera ett fyrdelat namn.

NULL för schemabundna enheter eftersom de måste finnas i samma databas och därför endast kan definieras med ett tvådelat (schema.objekt) 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 de anges med ett endelat eller tvådelat namn.

NULL för schemabundna entiteter eftersom de måste finnas i samma databas och därför endast kan definieras med ett tvådelat (schema.objekt) 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 specificera schemanamnet.

Aldrig NULL för schemabundna referenser eftersom schemabundna enheter måste definieras och refereras med ett tvådelat namn.
referenced_entity_name sysname Namnet på den refererade entiteten. Inte nullbar.
referenced_id int ID för den refererade entiteten. Värdet på denna kolumn är aldrig NULL för schemabundna referenser. Värdet på denna kolumn gäller alltid NULL för korsserver- och databasreferenser.

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

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 enheten är anropsberoende och löses vid körning. I detta fall är referenced_id .NULL

0 = Det refererade entitets-ID:t är inte beroende av anroparen.

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 beroende av anroparen. En referens i formatet EXEC MyDatabase..MyProc är dock anroparberoende.
is_ambiguous bit Indikerar att referensen är tvetydig och kan lösas 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. Tills den lagrade proceduren körs är det inte känt om Sales.GetOrder() är en användardefinierad funktion i schemat Sales eller kolumn med namnet Sales UDT med en metod som heter GetOrder().

1 = Referensen är tvetydig.

0 = Referensen är entydig eller så kan entiteten bindas framgångsrikt 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, standardinställningar, 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 Ja1 Ja
Utsikt Ja Ja
Filtrerat index Ja2 Nej
Filtrerad statistik Ja2 Nej
Transact-SQL lagrad procedur3 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

1 En tabell spåras som en referensentitet endast 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 DEFAULT begränsning.

2 Varje kolumn som används i filterpredikatet spåras som en referensentitet.

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

Behörigheter

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

Exempel

A. Returnera 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');

B. Returnera 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');

C. Returnera databasöverskridande beroenden

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. NULL returneras i referenced_schema_name kolumnen för den refererade entiteten t3 eftersom ett schemanamn inte anges för den entiteten i proceduren definition.

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;