sys.sql_expression_dependencies (SQL Bertransaksi)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Managed Instance yesAzure Synapse Analytics Analytics yesPlatform 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)