sys.sql_expression_dependencies (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse 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 |
---|---|---|
Tabel | Ya* | Ya |
Tampilan | 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 |
Antrean | 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 LIHAT DEFINISI 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)