sys.sql_expression_dependencies (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Berisi satu baris untuk setiap dependensi berdasarkan nama pada entitas yang ditentukan pengguna dalam database saat ini. Ini termasuk ketergantungan antara fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar dan modul SQL Server lainnya. Dependensi antara dua entitas dibuat ketika satu entitas, yang disebut entitas yang direferensikan, muncul berdasarkan nama dalam ekspresi SQL yang bertahan dari entitas lain, yang disebut entitas referensi. Misalnya, ketika tabel dirujuk dalam definisi tampilan, tampilan, sebagai entitas referensi, tergantung pada tabel, entitas yang dirujuk. Jika tabel dihilangkan, tampilan tidak dapat digunakan.

Untuk informasi selengkapnya, lihat Fungsi Yang Ditentukan Pengguna Skalar untuk OLTP Dalam Memori.

Anda dapat menggunakan tampilan katalog ini untuk melaporkan informasi dependensi untuk entitas berikut:

  • Entitas yang terikat skema.

  • Entitas yang tidak terikat skema.

  • Entitas lintas database dan lintas server. Nama entitas dilaporkan; namun, ID entitas tidak diselesaikan.

  • Dependensi tingkat kolom pada entitas yang terikat skema. Dependensi tingkat kolom untuk objek yang tidak terikat skema dapat dikembalikan dengan menggunakan sys.dm_sql_referenced_entities.

  • DDL tingkat server memicu ketika dalam konteks database master.

Nama kolom Jenis data Deskripsi
referencing_id int ID entitas referensi. Tidak dapat diubah ke null.
referencing_minor_id int ID Kolom saat entitas referensi adalah kolom; jika tidak, 0. Tidak dapat diubah ke null.
referencing_class kecil Kelas entitas referensi.

1 = Objek atau kolom

12 = Pemicu Database DDL

13 = Pemicu Server DDL

Tidak dapat diubah ke null.
referencing_class_desc nvarchar(60) Deskripsi kelas entitas referensi.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Tidak dapat diubah ke null.
is_schema_bound_reference bit 1 = Entitas yang dirujuk terikat skema.

0 = Entitas yang dirujuk tidak terikat skema.

Tidak dapat diubah ke null.
referenced_class kecil Kelas entitas yang dirujuk.

1 = Objek atau kolom

6 = Jenis

10 = Koleksi skema XML

21 = Fungsi partisi

Tidak dapat diubah ke null.
referenced_class_desc nvarchar(60) Deskripsi kelas entitas yang dirujuk.

OBJECT_OR_COLUMN

TYPE

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Tidak dapat diubah ke null.
referenced_server_name nama sysname Nama server entitas yang dirujuk.

Kolom ini diisi untuk dependensi lintas server yang dibuat dengan menentukan nama empat bagian yang valid. Untuk informasi tentang nama multipihak, lihat Konvensi sintaks transact-SQL.

NULL untuk entitas yang tidak terikat skema yang entitasnya dirujuk tanpa menentukan nama empat bagian.

NULL untuk entitas yang terikat skema karena harus berada dalam database yang sama dan oleh karena itu hanya dapat ditentukan menggunakan nama dua bagian (skema.object).
referenced_database_name nama sysname Nama database entitas yang dirujuk.

Kolom ini diisi untuk referensi lintas database atau lintas server yang dibuat dengan menentukan nama tiga bagian atau empat bagian yang valid.

NULL untuk referensi yang tidak terikat skema saat ditentukan menggunakan nama satu bagian atau dua bagian.

NULL untuk entitas yang terikat skema karena harus berada dalam database yang sama dan oleh karena itu hanya dapat ditentukan menggunakan nama dua bagian (skema.object).
referenced_schema_name nama sysname Skema tempat entitas yang dirujuk berada.

NULL untuk referensi yang tidak terikat skema di mana entitas dirujuk tanpa menentukan nama skema.

Jangan pernah NULL untuk referensi terikat skema karena entitas yang terikat skema harus ditentukan dan dirujuk dengan menggunakan nama dua bagian.
referenced_entity_name nama sysname Nama entitas yang dirujuk. Tidak dapat diubah ke null.
referenced_id int ID entitas yang dirujuk. Nilai kolom ini tidak pernah NULL untuk referensi terikat skema. Nilai kolom ini selalu NULL untuk referensi lintas server dan lintas database.

NULL untuk referensi dalam database jika ID tidak dapat ditentukan. Untuk referensi yang tidak terikat skema, ID tidak dapat diselesaikan dalam kasus berikut:

Entitas yang dirujuk tidak ada dalam database.

Skema entitas yang dirujuk tergantung pada skema pemanggil dan diselesaikan pada waktu proses. Dalam hal ini, is_caller_dependent diatur ke 1.
referenced_minor_id int ID kolom yang dirujuk saat entitas referensi adalah kolom; jika tidak, 0. Tidak dapat diubah ke null.

Entitas yang direferensikan adalah kolom ketika kolom diidentifikasi berdasarkan nama di entitas referensi, atau ketika entitas induk digunakan dalam pernyataan SELECT * .
is_caller_dependent bit Menunjukkan bahwa pengikatan skema untuk entitas yang dirujuk terjadi pada runtime; oleh karena itu, resolusi ID entitas tergantung pada skema pemanggil. Ini terjadi ketika entitas yang direferensikan adalah prosedur tersimpan, prosedur tersimpan yang diperluas, atau fungsi yang ditentukan pengguna yang tidak terikat skema yang disebut dalam pernyataan EXECUTE.

1 = Entitas yang dirujuk adalah dependen pemanggil dan diselesaikan saat runtime. Dalam hal ini, referenced_id NULL.

0 = ID entitas yang dirujuk bukan dependen penelepon.

Selalu 0 untuk referensi terikat skema dan untuk referensi lintas database dan lintas server yang secara eksplisit menentukan nama skema. Misalnya, referensi ke entitas dalam format EXEC MyDatabase.MySchema.MyProc bukan dependen penelepon. Namun, referensi dalam format EXEC MyDatabase..MyProc adalah dependen penelepon.
is_ambiguous bit Menunjukkan referensi ambigu dan dapat diselesaikan pada waktu proses ke fungsi yang ditentukan pengguna, jenis yang ditentukan pengguna (UDT), atau referensi xquery ke kolom jenis xml.

Misalnya, asumsikan bahwa pernyataan SELECT Sales.GetOrder() FROM Sales.MySales ditentukan dalam prosedur tersimpan. Hingga prosedur tersimpan dijalankan, tidak diketahui apakah Sales.GetOrder() itu fungsi yang ditentukan pengguna dalam Sales skema atau kolom bernama Sales jenis UDT dengan metode bernama GetOrder().

1 = Referensi ambigu.

0 = Referensi tidak ambigu atau entitas dapat berhasil terikat saat tampilan dipanggil.

Selalu 0 untuk referensi terikat skema.

Keterangan

Tabel berikut mencantumkan jenis entitas yang informasi dependensinya dibuat dan dikelola. Informasi dependensi tidak dibuat atau dikelola untuk aturan, default, tabel sementara, prosedur tersimpan sementara, atau objek sistem.

Catatan

Azure Synapse Analytics dan Gudang Data Paralel mendukung tabel, tampilan, statistik yang difilter, dan jenis entitas prosedur tersimpan Transact-SQL dari daftar ini. Informasi dependensi dibuat dan dikelola hanya untuk tabel, tampilan, dan statistik yang difilter.

Jenis entitas Entitas referensi Entitas yang dirujuk
Table Ya* Ya
Tampilkan Ya Ya
Indeks yang difilter Ya** No
Statistik yang difilter Ya** No
Prosedur tersimpan T-SQL*** Ya Ya
Prosedur tersimpan CLR Tidak Ya
Fungsi yang ditentukan pengguna Transact-SQL Ya Ya
Fungsi yang ditentukan pengguna CLR Tidak Ya
Pemicu CLR (DML dan DDL) Tidak Tidak
Pemicu DML T-SQL Ya Tidak
Pemicu DDL tingkat database Transact-SQL Ya Tidak
Pemicu DDL tingkat server Transact-SQL Ya Tidak
Prosedur tersimpan diperpanjang Tidak Ya
Queue Tidak Ya
Sinonim Tidak Ya
Jenis (alias dan jenis yang ditentukan pengguna CLR) Tidak Ya
Koleksi skema XML Tidak Ya
Fungsi partisi Tidak Ya

* Tabel dilacak sebagai entitas referensi hanya ketika mereferensikan modul Transact-SQL, jenis yang ditentukan pengguna, atau koleksi skema XML dalam definisi kolom komputasi, batasan CHECK, atau batasan DEFAULT.

** Setiap kolom yang digunakan dalam predikat filter dilacak sebagai entitas referensi.

Prosedur tersimpan bernomor dengan nilai bilangan bulat yang lebih besar dari 1 tidak dilacak sebagai entitas referensi atau referensi.

Izin

Memerlukan izin VIEW DEFINITION pada database dan izin SELECT pada sys.sql_expression_dependencies untuk database. Secara default, izin SELECT hanya diberikan kepada anggota peran database tetap db_owner. Saat izin SELECT dan VIEW DEFINITION diberikan kepada pengguna lain, penerima hibah dapat melihat semua dependensi dalam database.

Contoh

J. Mengembalikan entitas yang dirujuk oleh entitas lain

Contoh berikut mengembalikan tabel dan kolom yang dirujuk dalam tampilan Production.vProductAndDescription. Tampilan bergantung pada entitas (tabel dan kolom) yang dikembalikan dalam referenced_entity_name kolom dan 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. Mengembalikan entitas yang mereferensikan entitas lain

Contoh berikut mengembalikan entitas yang mereferensikan tabel Production.Product. Entitas yang referencing_entity_name dikembalikan dalam kolom bergantung pada Product tabel.

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. Mengembalikan dependensi lintas database

Contoh berikut mengembalikan semua dependensi lintas database. Contoh pertama-tama membuat database db1 dan dua prosedur tersimpan yang mereferensikan tabel dalam database db2 dan db3. Tabel sys.sql_expression_dependencies kemudian dikueri untuk melaporkan dependensi lintas database antara prosedur dan tabel. Perhatikan bahwa NULL dikembalikan di referenced_schema_name kolom untuk entitas t3 yang direferensikan karena nama skema tidak ditentukan untuk entitas tersebut dalam definisi prosedur.

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  
  

Lihat Juga

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