適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Microsoft Fabric 中的 SQL 資料庫
針對目前資料庫中每個依名稱參考另一個使用者定義實體的實體,各傳回一個數據列。 當一個稱為 參考實體的實體出現在另一個實體的保存 SQL 運算式中,稱為 參考實體時,就會建立兩個實體之間的相依性。 例如,如果使用者定義型別 (UDT) 指定為參考實體,則此函式會傳回每個依名稱在其定義中參考該類型的使用者定義實體。 函式不會傳回其他資料庫中可能參考指定實體的實體。 此函式必須在 master 資料庫的內容中執行,才能將伺服器層級的 DDL 觸發程式當做參考實體傳回。
您可以使用這個動態管理函式來報告目前資料庫中參考指定實體的下列實體類型:
架構系結或非架構系結實體
資料庫層級 DDL 觸發程式
伺服器層級 DDL 觸發程式
適用於:SQL Server (SQL Server 2008 (10.0.x) 和更新版本),SQL 資料庫。
Syntax
sys.dm_sql_referencing_entities (
' schema_name.referenced_entity_name ' , ' <referenced_class> ' )
<referenced_class> ::=
{
OBJECT
| TYPE
| XML_SCHEMA_COLLECTION
| PARTITION_FUNCTION
}
引數
schema_name.referenced_entity_name 這是參考實體的名稱。
schema_name 是必要的,除非參考的類別是PARTITION_FUNCTION。
schema_name.referenced_entity_name 是 nvarchar(517)。
<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } 這是參考實體的類別。 每個語句只能指定一個類別。
<referenced_class> 是 nvarchar(60)。
傳回的資料表
| 欄位名稱 | 資料類型 | 描述 |
|---|---|---|
| referencing_schema_name | sysname | 參考實體所屬的架構。 可為空值。 資料庫層級和伺服器層級 DDL 觸發程式的 NULL。 |
| referencing_entity_name | sysname | 參考實體的名稱。 不可為 Null。 |
| referencing_id | int | 參考實體的標識碼。 不可為 Null。 |
| referencing_class | tinyint | 參考實體的類別。 不可為 Null。 1 = 物件 12 = 資料庫層級 DDL 觸發程式 13 = 伺服器層級 DDL 觸發程式 |
| referencing_class_desc | nvarchar(60) | 參考實體類別的描述。 目標 DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER |
| is_caller_dependent | 位元 | 指出參考實體標識碼的解析會在運行時間發生,因為它取決於呼叫者的架構。 1 = 參考實體有可能參考實體;不過,參考實體標識碼的解析相依於呼叫端,因此無法判斷。 這隻會針對在 EXECUTE 語句中呼叫之預存程式、擴充預存程式或使用者定義函數的非架構系結參考發生。 0 = 參考的實體不相依於呼叫端。 |
例外狀況
傳回下列任一條件下的空白結果集:
系統物件已指定。
指定的實體不存在於目前的資料庫中。
指定的實體不會參考任何實體。
傳遞無效的參數。
當指定的參考實體是編號的預存程式時,傳回錯誤。
備註
下表列出建立和維護相依性資訊的實體類型。 不會針對規則、預設值、臨時表、暫存程式或系統物件建立或維護相依性資訊。
| 實體類型 | 參考實體 | 參考的實體 |
|---|---|---|
| 表 | 是* | Yes |
| View | Yes | Yes |
| Transact-SQL 預存程式** | Yes | Yes |
| CLR 預存程式 | No | Yes |
| Transact-SQL 用戶定義函數 | Yes | Yes |
| CLR 使用者定義函數 | No | Yes |
| CLR 觸發程式 (DML 和 DDL) | No | No |
| Transact-SQL DML 觸發程式 | Yes | No |
| Transact-SQL 資料庫層級 DDL 觸發程式 | Yes | No |
| Transact-SQL 伺服器層級 DDL 觸發程式 | Yes | No |
| 擴展預存程序 | No | Yes |
| 佇列 | No | Yes |
| Synonym | No | Yes |
| 類型 (別名和 CLR 使用者定義類型) | No | Yes |
| XML 結構描述集合 | No | Yes |
| 分割函數 | No | Yes |
* 只有當資料表在計算欄位、CHECK 限制 DEFAULT 或限制的定義中引用 Transact-SQL 模組、使用者定義型別或 XML 結構集合時,才會被追蹤為參考實體。
** 具有大於 1 之整數值的編號預存程式不會追蹤為參考或參考實體。
許可
SQL Server 2008 (10.0.x) - SQL Server 2012 (11.x)
需要參考物件的CONTROL許可權。 當受參考實體為資料分割函數時,便需要資料庫的 CONTROL 權限。
需要sys.dm_sql_referencing_entities的 SELECT 許可權。 根據預設,SELECT 權限會授與 public。
SQL Server 2014 (12.x) 和更新版本
不需要參考對象的許可權。 若使用者僅對部分參考實體擁有 VIEW 定義,則可返回部分結果。
當參考實體是物件時,需要 VIEW 在物件上進行定義。
當參考實體是資料庫層級的 DDL 觸發器時,需要 VIEW 在資料庫中進行定義。
當引用實體是伺服器層級的 DDL 觸發器時,必須 VIEW 在伺服器上進行任何定義。
Examples
A. 傳回參考指定實體的實體
下列範例會傳回目前資料庫中參考指定數據表的實體。
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. 傳回參考指定型別的實體
下列範例會傳回參考別名類型 dbo.Flag的實體。 結果集顯示兩個預存程式使用此類型。 該 dbo.Flag 型別也用於表中多個欄位 HumanResources.Employee 的定義;然而,由於該型別不在計算欄位、CHECK 限制 DEFAULT 或表格中的限制中,因此該表格不會回傳 HumanResources.Employee 任何列。
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
結果如下。
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)`
另請參閱
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)