取得關於 DML 觸發程序的詳細資訊
本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL 取得有關 SQL Server 2012 中 DML 觸發程序的資訊。 這項資訊可能包括資料表上觸發程序的類型、觸發程序的名稱、其擁有者,以及建立或修改的日期。 如果觸發程序建立時並未加密,則您會取得觸發程序的定義。 定義可幫助您了解觸發程序如何影響本身定義所在的資料表。 另外,您可以找出特定觸發程序所使用的物件。 有了這項資訊,您就可以識別影響觸發程序的物件 (如果已在資料庫中變更或刪除這些物件)。
本主題內容
開始之前:
安全性
若要取得 DML 觸發程序的相關資訊,使用:
SQL Server Management Studio
Transact-SQL
開始之前
安全性
權限
sys.sql.modules、sys.object、sys.triggers、sys.events、sys.trigger_events
目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。如需詳細資訊,請參閱<中繼資料可見性組態>。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 權限授與其他使用者時,被授與者就可以檢視資料庫中的所有相依性。
[Top]
使用 SQL Server Management Studio
若要檢視 DML 觸發程序的定義
在 [物件總管] 中,連接到 Database Engine 的執行個體,然後展開該執行個體。
展開您要的資料庫,展開 [資料表],然後展開包含您要檢視其定義之觸發程序的資料表。
展開 [觸發程序],以滑鼠右鍵按一下您要的觸發程序,再按一下 [修改]。 DML 觸發程序的定義會出現在查詢視窗中。
若要檢視 DML 觸發程序的相依性
在 [物件總管] 中,連接到 Database Engine 的執行個體,然後展開該執行個體。
展開您要的資料庫,展開 [資料表],然後展開包含您要檢視的觸發程序及其相依性的資料表。
展開 [觸發程序],以滑鼠右鍵按一下您要的觸發程序,再按一下 [檢視相依性]。
在 [物件相依性] 視窗中,若要檢視相依於 DML 觸發程序的物件,請選取 [相依於 <DML 觸發程序名稱> 的物件]。 物件會出現在 [相依性] 區域中。
若要檢視 DML 所相依的物件,請選取 [<DML 觸發程序名稱> 所相依的物件]。 物件會出現在 [相依性] 區域中。 展開每個節點,查看所有物件。
若要取得出現在 [相依性] 區域中之物件的相關資訊,請按一下該物件。 [選取的物件] 欄位的 [名稱]、[類型] 和 [相依性類型] 方塊中會提供資訊。
若要關閉 [物件相依性] 視窗,請按一下 [確定]。
[Top]
使用 Transact-SQL
若要檢視 DML 觸發程序的定義
連接到 Database Engine。
在標準列中,按一下 [新增查詢]。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視 iuPerson 觸發程序的定義。
USE AdventureWorks2012;
GO
SELECT definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID(N'Person.iuPerson');
GO
USE AdventureWorks2012;
GO
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Person.iuPerson')) AS ObjectDefinition;
GO
USE AdventureWorks2012;
GO
EXEC sp_helptext 'Person.iuPerson'
GO
若要檢視 DML 觸發程序的相依性
連接到 Database Engine。
在標準列中,按一下 [新增查詢]。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視 iuPerson 觸發程序的相依性。
USE AdventureWorks2012;
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 觸發程序的資訊
連接到 Database Engine。
在標準列中,按一下 [新增查詢]。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視資料庫中有關 DML 觸發程序 (TR) 的資訊。
USE AdventureWorks2012;
GO
SELECT name, parent_id, create_date, modify_date, is_instead_of_trigger
FROM sys.triggers
WHERE type = 'TR';
GO
USE AdventureWorks2012;
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 AdventureWorks2012;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'Person.iuPerson'), 'ExecIsInsteadOfTrigger');
GO
若要檢視有關引發 DML 觸發程序之事件的資訊
連接到 Database Engine。
在標準列中,按一下 [新增查詢]。
將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視引發 iuPerson 觸發程序的事件。
USE AdventureWorks2012;
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 AdventureWorks2012;
GO SELECT object_id, type,is_first, is_last
FROM sys.trigger_events
WHERE object_id = OBJECT_ID('Person.iuPerson');
GO
[Top]
請參閱
參考
DISABLE TRIGGER (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)