获取有关 DML 触发器的信息

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中获取有关 DML 触发器的信息。 此信息可包含针对某个表的触发器的类型、触发器的名称、其所有者以及创建或修改日期。 如果在创建触发器时未加密,你可获取该触发器的定义。 通过该定义,可以帮助你了解该触发器如何影响对其定义该触发器的表。 此外,你可以找出特定触发器使用的对象。 通过该信息,可在数据库中影响触发器的对象发生更改或删除它们时确定这些对象。

本主题内容

开始之前

安全性

权限

sys.sql.modules, sys.object, sys.triggers, sys.events, sys.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 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)