sys.sql_expression_dependencies (SQL Bertransaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
Berisi satu baris untuk setiap dependensi menurut nama pada entitas yang ditentukan pengguna dalam database saat ini. Ini termasuk ketergantungan antara fungsi yang dikompilasi secara asli, skalar yang ditentukan pengguna 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, saat tabel dirujuk dalam definisi tampilan, tampilan, sebagai entitas referensi, bergantung pada tabel, entitas yang dirujuk. Jika tabel dihilangkan, tampilan tidak dapat digunakan.
Untuk informasi selengkapnya, lihat Scalar User-Defined Functions untuk OLTP In-Memory.
Anda bisa 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 | tinyint | Kelas entitas referensi. 1 = Objek atau kolom 12 = Pemicu DDL database 13 = Pemicu DDL Server 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 | tinyint | 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 JENIS 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 Sintaksis transact-SQL (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 didefinisikan menggunakan nama dua bagian (schema.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 didefinisikan menggunakan nama dua bagian (schema.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 durasi. 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 bergantung pada pemanggil dan diselesaikan saat runtime. Dalam hal ini, referenced_id ADALAH 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 tidak bergantung pada penelepon. Namun, referensi dalam format EXEC MyDatabase..MyProc bergantung pada penelepon. |
| is_ambiguous | bit | Menunjukkan referensi ambigu dan dapat diselesaikan pada durasi 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 didefinisikan dalam prosedur tersimpan. Sampai 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 diikat saat tampilan dipanggil. Selalu 0 untuk referensi terikat skema. |
Keterangan
Tabel berikut ini mencantumkan jenis entitas tempat informasi dependensi dibuat dan dikelola. Informasi dependensi tidak dibuat atau dipertahankan untuk aturan, default, tabel sementara, prosedur tersimpan sementara, atau objek sistem.
Catatan
Azure Synapse Analytics dan Parallel Data Warehouse 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** | Tidak |
| Statistik yang difilter | Ya** | Tidak |
| Prosedur tersimpan SQL bertransaksi*** | Ya | Ya |
| Prosedur tersimpan CLR | Tidak | Ya |
| Fungsi yang ditentukan pengguna SQL bertransaksi | Ya | Ya |
| Fungsi yang ditentukan pengguna CLR | Tidak | Ya |
| Pemicu CLR (DML dan DDL) | Tidak | Tidak |
| Pemicu DML SQL transaksi | Ya | Tidak |
| Pemicu DDL tingkat database SQL transact | Ya | Tidak |
| Pemicu DDL tingkat server SQL bertransaksi | 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 izin dapat melihat semua dependensi dalam database.
Contoh
A. 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 di referenced_entity_name kolom dan referenced_column_name .
USE AdventureWorks2012;
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
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 AdventureWorks2012;
GO
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
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 (SQL Bertransaksi)
sys.dm_sql_referencing_entities (SQL bertransaksi)