取得關於 DML 觸發程序的詳細資訊

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

此主題說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中取得 DML 觸發程序相關資訊。 這項資訊可能包括資料表上觸發程序的類型、觸發程序的名稱、其擁有者,以及建立或修改的日期。 如果觸發程序建立時並未加密,則您會取得觸發程序的定義。 定義可幫助您了解觸發程序如何影響本身定義所在的資料表。 另外,您可以找出特定觸發程序所使用的物件。 有了這項資訊,您就可以識別影響觸發程序的物件 (如果已在資料庫中變更或刪除這些物件)。

本主題內容

開始之前

安全性

權限

sys.sql.modulessys.objectsys.triggerssys.eventssys.trigger_events
目錄檢視中元數據的可見度僅限於用戶擁有的安全性實體,或用戶獲授與某些許可權的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration

OBJECT_DEFINITION、OBJECTPROPERTY、 sp_helptext
需要 public 角色的成員資格。 凡具有下列任一權限的物件擁有者或承授者,都看得到使用者物件的定義:ALTER、CONTROL、TAKE OWNERSHIP 或 VIEW DEFINITION。 db_ownerdb_ddladmindb_securityadmin 固定資料庫角色的成員隱含地擁有這些權限。

sys.sql_expression_dependencies
需要資料庫的 VIEW DEFINITION 權限和資料庫之 sys.sql_expression_dependencies 的 SELECT 權限。 依預設,SELECT 權限只授與 db_owner 固定資料庫角色的成員。 當 SELECT 和 VIEW DEFINITION 權限授與其他使用者時,被授與者就可以檢視資料庫中的所有相依性。

使用 SQL Server Management Studio

若要檢視 DML 觸發程序的定義

  1. 在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。

  2. 展開您要的資料庫,展開 [資料表] ,然後展開包含您要檢視其定義之觸發程序的資料表。

  3. 展開 [觸發程序],以滑鼠右鍵按一下您要的觸發程序,然後按一下 [修改]。 DML 觸發程序的定義會出現在查詢視窗中。

若要檢視 DML 觸發程序的相依性

  1. 在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。

  2. 展開您要的資料庫,展開 [資料表] ,然後展開包含您要檢視的觸發程序及其相依性的資料表。

  3. 展開 [觸發程序],以滑鼠右鍵按一下您要的觸發程序,然後按一下 [檢視相依性]。

  4. 在 [物件相依性] 視窗中,若要檢視相依於 DML 觸發程序的物件,請選取 [相依於 <DML 觸發程序名稱> 的物件]。 物件會出現在 [相依性] 區域中。

    若要檢視 DML 所相依的物件,請選取 [<DML 觸發程序名稱> 所相依的物件]。 物件會出現在 [相依性] 區域中。 展開每個節點,查看所有物件。

  5. 若要取得出現在 [相依性] 區域中之物件的相關資訊,請按一下該物件。 [選取的物件] 欄位的 [名稱][類型][相依性類型] 方塊中會提供資訊。

  6. 若要關閉 [物件相依性] 視窗,請按一下 [確定]

使用 TRANSACT-SQL

若要檢視 DML 觸發程序的定義

  1. 連線至資料庫引擎。

  2. 在標準列中,按一下 [新增查詢]

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視 iuPerson 觸發程序的定義。

USE AdventureWorks2022;  
GO  
SELECT definition   
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID(N'Person.iuPerson');   
GO  
USE AdventureWorks2022;   
GO  
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Person.iuPerson')) AS ObjectDefinition;   
GO  
  
USE AdventureWorks2022;   
GO  
EXEC sp_helptext 'Person.iuPerson'  
GO  
  

若要檢視 DML 觸發程序的相依性

  1. 連線至資料庫引擎。

  2. 在標準列中,按一下 [新增查詢]

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視 iuPerson 觸發程序的相依性。

USE AdventureWorks2022;   
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_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'Person.iuPerson');   
GO  
  

若要檢視有關資料庫中 DML 觸發程序的資訊

  1. 連線至資料庫引擎。

  2. 在標準列中,按一下 [新增查詢]

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視資料庫中有關 DML 觸發程序 (TR) 的資訊。

USE AdventureWorks2022;   
GO  
SELECT  name, parent_id, create_date, modify_date, is_instead_of_trigger  
FROM sys.triggers  
WHERE type = 'TR';   
GO  
  
USE AdventureWorks2022;   
GO  
SELECT  name, object_id, schema_id, parent_object_id, type_desc, create_date, modify_date, is_published  
FROM sys.objects  
WHERE type = 'TR';   
GO  
  
USE AdventureWorks2022;   
GO  
SELECT OBJECTPROPERTY(OBJECT_ID(N'Person.iuPerson'), 'ExecIsInsteadOfTrigger');   
GO  
  

若要檢視有關引發 DML 觸發程序之事件的資訊

  1. 連線至資料庫引擎。

  2. 在標準列中,按一下 [新增查詢]

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視引發 iuPerson 觸發程序的事件。

USE AdventureWorks2022;   
GO  
SELECT object_id, type, type_desc, is_trigger_event, event_group_type, event_group_type_desc   
FROM sys.events  
WHERE object_id = OBJECT_ID('Person.iuPerson');   
GO  
USE AdventureWorks2022;   
GO   
SELECT object_id, type,is_first, is_last  
FROM sys.trigger_events  
WHERE object_id = OBJECT_ID('Person.iuPerson');   
GO  

另請參閱

CREATE TRIGGER (Transact-SQL)
DROP TRIGGER (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_rename (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
sp_help (Transact-SQL)
sp_helptrigger (Transact-SQL)
sys.triggers (Transact-SQL)
sys.trigger_events (Transact-SQL)
sys.sql_modules (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.server_triggers (Transact-SQL)
sys.server_trigger_events (Transact-SQL)
sys.server_sql_modules (Transact-SQL)
sys.server_assembly_modules (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)