分享方式:


sys.dm_sql_referencing_entities (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

針對目前資料庫中每個依名稱參考另一個使用者定義實體的實體,各傳回一個數據列。 當一個稱為 參考實體的實體出現在另一個實體的保存 SQL 運算式中,稱為 參考實體時,就會建立兩個實體之間的相依性。 例如,如果使用者定義型別 (UDT) 指定為參考實體,則此函式會傳回每個依名稱在其定義中參考該類型的使用者定義實體。 函式不會傳回其他資料庫中可能參考指定實體的實體。 此函式必須在 master 資料庫的內容中執行,才能將伺服器層級的 DDL 觸發程式當做參考實體傳回。

您可以使用這個動態管理函式來報告目前資料庫中參考指定實體的下列實體類型:

  • 架構系結或非架構系結實體

  • 資料庫層級 DDL 觸發程式

  • 伺服器層級 DDL 觸發程式

適用於:SQL Server (SQL Server 2008 (10.0.x) 和更新版本),SQL 資料庫。

Transact-SQL 語法慣例

語法

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_namenvarchar(517)

<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } 這是參考實體的類別。 每個語句只能指定一個類別。

<referenced_class>nvarchar(60)。

傳回的資料表

資料行名稱 資料類型 描述
referencing_schema_name sysname 參考實體所屬的架構。 可為 Null。

資料庫層級和伺服器層級 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) 參考實體類別的描述。

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER
is_caller_dependent bit 指出參考實體標識碼的解析會在運行時間發生,因為它取決於呼叫者的架構。

1 = 參考實體有可能參考實體;不過,參考實體標識碼的解析相依於呼叫端,因此無法判斷。 這隻會針對在 EXECUTE 語句中呼叫之預存程式、擴充預存程式或使用者定義函數的非架構系結參考發生。

0 = 參考的實體不相依於呼叫端。

例外狀況

傳回下列任一條件下的空白結果集:

  • 系統物件已指定。

  • 指定的實體不存在於目前的資料庫中。

  • 指定的實體不會參考任何實體。

  • 傳遞無效的參數。

當指定的參考實體是編號的預存程式時,傳回錯誤。

備註

下表列出建立和維護相依性資訊的實體類型。 不會針對規則、預設值、臨時表、暫存程式或系統物件建立或維護相依性資訊。

實體類型 參考實體 參考的實體
Table 是* Yes
檢視表​​ Yes Yes
Transact-SQL 預存程式** Yes Yes
CLR 預存程式 No Yes
Transact-SQL 用戶定義函數 Yes Yes
CLR 使用者定義函數 No Yes
CLR 觸發程式 (DML 和 DDL) No No
Transact-SQL DML 觸發程式 No
Transact-SQL 資料庫層級 DDL 觸發程式 No
Transact-SQL 伺服器層級 DDL 觸發程式 No
擴充預存程序 No Yes
Queue No Yes
同義字 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 DEFINITION,則可以傳回部分結果。

  • 當參考實體是 物件時,物件上需要 VIEW DEFINITION。

  • 當參考實體是資料庫層級 DDL 觸發程式時,需要資料庫的 VIEW DEFINITION。

  • 當參考實體是伺服器層級 DDL 觸發程式時,需要伺服器上的 VIEW ANY DEFINITION。

範例

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)