取得關於 DML 觸發程序的詳細資訊
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
此主題說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中取得 DML 觸發程序相關資訊。 這項資訊可能包括資料表上觸發程序的類型、觸發程序的名稱、其擁有者,以及建立或修改的日期。 如果觸發程序建立時並未加密,則您會取得觸發程序的定義。 定義可幫助您了解觸發程序如何影響本身定義所在的資料表。 另外,您可以找出特定觸發程序所使用的物件。 有了這項資訊,您就可以識別影響觸發程序的物件 (如果已在資料庫中變更或刪除這些物件)。
本主題內容
開始之前:
若要取得 DML 觸發程序的相關資訊,使用:
開始之前
安全性
權限
sys.sql.modules、 sys.object、 sys.triggers、 sys.events、 sys.trigger_events
目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration。
OBJECT_DEFINITION、OBJECTPROPERTY、 sp_helptext
需要 public 角色的成員資格。 凡具有下列任一權限的物件擁有者或承授者,都看得到使用者物件的定義:ALTER、CONTROL、TAKE OWNERSHIP 或 VIEW DEFINITION。 db_owner、 db_ddladmin和 db_securityadmin 固定資料庫角色的成員隱含地擁有這些權限。
sys.sql_expression_dependencies
需要資料庫的 VIEW DEFINITION 權限和資料庫之 sys.sql_expression_dependencies 的 SELECT 權限。 依預設,SELECT 權限只授與 db_owner 固定資料庫角色的成員。 當 SELECT 和 VIEW DEFINITION 權限授與其他使用者時,被授與者就可以檢視資料庫中的所有相依性。
使用 SQL Server Management Studio
若要檢視 DML 觸發程序的定義
在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。
展開您要的資料庫,展開 [資料表] ,然後展開包含您要檢視其定義之觸發程序的資料表。
展開 [觸發程序],以滑鼠右鍵按一下您要的觸發程序,然後按一下 [修改]。 DML 觸發程序的定義會出現在查詢視窗中。
若要檢視 DML 觸發程序的相依性
在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。
展開您要的資料庫,展開 [資料表] ,然後展開包含您要檢視的觸發程序及其相依性的資料表。
展開 [觸發程序],以滑鼠右鍵按一下您要的觸發程序,然後按一下 [檢視相依性]。
在 [物件相依性] 視窗中,若要檢視相依於 DML 觸發程序的物件,請選取 [相依於 <DML 觸發程序名稱> 的物件]。 物件會出現在 [相依性] 區域中。
若要檢視 DML 所相依的物件,請選取 [<DML 觸發程序名稱> 所相依的物件]。 物件會出現在 [相依性] 區域中。 展開每個節點,查看所有物件。
若要取得出現在 [相依性] 區域中之物件的相關資訊,請按一下該物件。 [選取的物件] 欄位的 [名稱] 、 [類型] 和 [相依性類型] 方塊中會提供資訊。
若要關閉 [物件相依性] 視窗,請按一下 [確定] 。
使用 TRANSACT-SQL
若要檢視 DML 觸發程序的定義
連線至資料庫引擎。
在標準列中,按一下 [新增查詢] 。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視
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 觸發程序的相依性
連線至資料庫引擎。
在標準列中,按一下 [新增查詢] 。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視
iuPerson
觸發程序的相依性。
USE AdventureWorks2022;
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_description,
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 觸發程序的資訊
連線至資料庫引擎。
在標準列中,按一下 [新增查詢] 。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視資料庫中有關 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 觸發程序之事件的資訊
連線至資料庫引擎。
在標準列中,按一下 [新增查詢] 。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行] 。 每個範例都會說明如何檢視引發
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)