sys.dm_sql_referencing_entities (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Mengembalikan satu baris untuk setiap entitas dalam database saat ini yang mereferensikan entitas lain yang ditentukan pengguna berdasarkan nama. 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, jika jenis yang ditentukan pengguna (UDT) ditentukan sebagai entitas yang dirujuk, fungsi ini mengembalikan setiap entitas yang ditentukan pengguna yang mereferensikan jenis berdasarkan nama dalam definisinya. Fungsi ini tidak mengembalikan entitas dalam database lain yang dapat mereferensikan entitas yang ditentukan. Fungsi ini harus dijalankan dalam konteks database master untuk mengembalikan pemicu DDL tingkat server sebagai entitas referensi.

Anda dapat menggunakan fungsi manajemen dinamis ini untuk melaporkan jenis entitas berikut dalam database saat ini yang mereferensikan entitas yang ditentukan:

  • Entitas terikat skema atau tidak terikat skema

  • Pemicu DDL tingkat database

  • Pemicu DDL tingkat server

Berlaku untuk: SQL Server (SQL Server 2008 (10.0.x) dan yang lebih baru), SQL Database.

Konvensi sintaks transact-SQL

Sintaks

sys.dm_sql_referencing_entities (  
    ' schema_name.referenced_entity_name ' , ' <referenced_class> ' )  
  
<referenced_class> ::=  
{  
    OBJECT  
  | TYPE  
  | XML_SCHEMA_COLLECTION  
  | PARTITION_FUNCTION  
}  

Argumen

schema_name.referenced_entity_name Adalah nama entitas yang dirujuk.

schema_name diperlukan kecuali ketika kelas yang dirujuk PARTITION_FUNCTION.

schema_name.referenced_entity_name adalah nvarchar(517).

<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } Adalah kelas entitas yang dirujuk. Hanya satu kelas yang dapat ditentukan per pernyataan.

<referenced_class> adalah nvarchar(60).

Tabel Dikembalikan

Nama kolom Jenis data Deskripsi
referencing_schema_name nama sysname Skema tempat entitas referensi berada. Dapat diubah ke null.

NULL untuk pemicu DDL tingkat database dan tingkat server.
referencing_entity_name nama sysname Nama entitas referensi. Tidak dapat diubah ke null.
referencing_id int ID entitas referensi. Tidak dapat diubah ke null.
referencing_class kecil Kelas entitas referensi. Tidak dapat diubah ke null.

1 = Objek

12 = Pemicu DDL tingkat database

13 = Pemicu DDL tingkat server
referencing_class_desc nvarchar(60) Deskripsi kelas entitas referensi.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER
is_caller_dependent bit Menunjukkan resolusi ID entitas yang dirujuk terjadi pada waktu proses karena bergantung pada skema pemanggil.

1 = Entitas referensi memiliki potensi untuk mereferensikan entitas; namun, resolusi ID entitas yang dirujuk bergantung pada pemanggil dan tidak dapat ditentukan. Ini hanya terjadi untuk referensi yang tidak terikat skema ke prosedur tersimpan, prosedur tersimpan yang diperluas, atau fungsi yang ditentukan pengguna yang disebut dalam pernyataan EXECUTE.

0 = Entitas yang dirujuk bukan dependen penelepon.

Pengecualian

Mengembalikan tataan hasil kosong di bawah salah satu kondisi berikut:

  • Objek sistem ditentukan.

  • Entitas yang ditentukan tidak ada di database saat ini.

  • Entitas yang ditentukan tidak mereferensikan entitas apa pun.

  • Parameter yang tidak valid diteruskan.

Mengembalikan kesalahan ketika entitas yang direferensikan yang ditentukan adalah prosedur tersimpan bernomor.

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.

Jenis entitas Entitas referensi Entitas yang dirujuk
Tabel Ya* Ya
Tampilan Ya Ya
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.

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

Izin

SQL Server 2008 (10.0.x) - SQL Server 2012 (11.x)

  • Memerlukan izin CONTROL pada objek yang dirujuk. Ketika entitas yang dirujuk adalah fungsi partisi, izin CONTROL pada database diperlukan.

  • Memerlukan izin SELECT pada sys.dm_sql_referencing_entities. Secara default, izin SELECT diberikan kepada publik.

SQL Server 2014 (12.x) dan yang lebih baru

  • Tidak memerlukan izin pada objek yang dirujuk. Hasil parsial dapat dikembalikan jika pengguna memiliki VIEW DEFINITION hanya pada beberapa entitas referensi.

  • Memerlukan DEFINISI TAMPILAN pada objek saat entitas referensi adalah objek.

  • Memerlukan VIEW DEFINITION pada database saat entitas referensi adalah pemicu DDL tingkat database.

  • Memerlukan LIHAT DEFINISI APA PUN di server saat entitas referensi adalah pemicu DDL tingkat server.

Contoh

J. Mengembalikan entitas yang merujuk ke entitas tertentu

Contoh berikut mengembalikan entitas dalam database saat ini yang merujuk ke tabel yang ditentukan.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');  
GO  

B. Mengembalikan entitas yang merujuk ke jenis tertentu

Contoh berikut mengembalikan entitas yang mereferensikan jenis dbo.Flagalias . Kumpulan hasil menunjukkan bahwa dua prosedur tersimpan menggunakan jenis ini. Jenis dbo.Flag ini juga digunakan dalam definisi beberapa kolom dalam HumanResources.Employee tabel; namun, karena jenisnya tidak dalam definisi kolom komputasi, batasan CHECK, atau batasan DEFAULT dalam tabel, tidak ada baris yang dikembalikan untuk HumanResources.Employee tabel.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');  
GO  

Berikut adalah hasil yang ditetapkan.

referencing_schema_name referencing_entity_name   referencing_id referencing_class_desc is_caller_dependent  
----------------------- -------------------------  ------------- ---------------------- -------------------  
HumanResources          uspUpdateEmployeeHireInfo  1803153469    OBJECT_OR_COLUMN       0  
HumanResources          uspUpdateEmployeeLogin     1819153526    OBJECT_OR_COLUMN       0  
(2 row(s) affected)`  

Lihat Juga

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