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

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

本主題內容

  • 開始之前:

    安全性

  • 若要取得 DML 觸發程序的相關資訊,使用:

    SQL Server Management Studio

    Transact-SQL

開始之前

安全性

權限

  • sys.sql.modulessys.objectsys.triggerssys.eventssys.trigger_events
    目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。如需詳細資訊,請參閱<中繼資料可見性組態>。

  • 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 權限授與其他使用者時,被授與者就可以檢視資料庫中的所有相依性。

搭配回到頁首連結使用的箭頭圖示[Top]

使用 SQL Server Management Studio

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

  1. [物件總管] 中,連接到 Database Engine 的執行個體,然後展開該執行個體。

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

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

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

  1. [物件總管] 中,連接到 Database Engine 的執行個體,然後展開該執行個體。

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

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

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

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

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

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

搭配回到頁首連結使用的箭頭圖示[Top]

使用 Transact-SQL

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

  1. 連接到 Database Engine。

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

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

  1. 連接到 Database Engine。

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

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視 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 觸發程序的資訊

  1. 連接到 Database Engine。

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

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視資料庫中有關 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 觸發程序之事件的資訊

  1. 連接到 Database Engine。

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

  3. 將下列其中一個範例複製並貼到查詢視窗中,然後按一下 [執行]。 每個範例都會說明如何檢視引發 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]

請參閱

參考

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)