获取有关 DML 触发器的信息

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中获取有关 DML 触发器的信息。 此信息可以包括表上的触发器类型、触发器的名称、其所有者及其创建或修改日期。 如果在创建触发器时未加密触发器,则获取触发器的定义。 可以使用定义来帮助理解触发器如何影响它所定义的表。 此外,还可以了解特定触发器使用的对象。 使用此信息,可以识别在数据库中更改或删除触发器时影响触发器的对象。

本主题内容

在您开始之前

安全

权限

sys.sql.modulessys.objectsys.triggerssys.eventssys.trigger_events
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration

OBJECT_DEFINITION、OBJECTPROPERTY、 sp_helptext
要求 公共 角色具有成员身份。 用户对象的定义对具有以下任一权限的对象所有者或被授权者可见: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 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. 连接到数据库引擎。

  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. 连接到数据库引擎。

  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. 连接到数据库引擎。

  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  

另请参阅

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)