获取有关 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 触发器的定义
在**“对象资源管理器”**中,连接到某个数据库引擎实例,再展开该实例。
展开您所需的数据库,再展开**“表”**,然后展开包含要查看其定义的触发器的表。
展开**“触发器”,右键单击需要的触发器,然后单击“修改”**。 将在查询窗口中显示 DML 触发器的定义。
查看 DML 触发器的依赖关系
在**“对象资源管理器”**中,连接到某个数据库引擎实例,再展开该实例。
展开您所需的数据库,再展开**“表”**,然后展开包含要查看的触发器及其依赖关系的表。
展开**“触发器”,右键单击需要的触发器,然后单击“查看依赖关系”**。
在**“对象依赖关系”窗口中,查看依赖于 DML 触发器的对象,然后选择“依赖于 <DML 触发器名称> 的对象”。 将在“依赖关系”**区域显示这些对象。
若要查看 DML 依赖得对象,选择**“<DML 触发器名称> 所依赖的对象”。 将在“依赖关系”**区域显示这些对象。 展开每个节点以查看所有对象。
若要获取有关**“依赖关系”区域中显示的对象的信息,请单击该对象。 在“所选对象”字段中,在“名称”、“类型”和“依赖关系类型”**框中提供信息。
若要关闭**“对象依赖关系”窗口,请单击“确定”**。
[Top]
使用 Transact-SQL
查看 DML 触发器的定义
连接到数据库引擎。
在标准菜单栏上,单击**“新建查询”**。
将以下示例之一复制并粘贴到查询窗口中,然后单击**“执行”**。 每个示例显示您如何查看 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 触发器的依赖关系
连接到数据库引擎。
在标准菜单栏上,单击**“新建查询”**。
将以下示例之一复制并粘贴到查询窗口中,然后单击**“执行”**。 每个示例显示您如何查看 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 触发器的信息
连接到数据库引擎。
在标准菜单栏上,单击**“新建查询”**。
将以下示例之一复制并粘贴到查询窗口中,然后单击**“执行”**。 每个示例显示您如何查看数据库中有关 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 触发器的事件的信息
连接到数据库引擎。
在标准菜单栏上,单击**“新建查询”**。
将以下示例之一复制并粘贴到查询窗口中,然后单击**“执行”**。 每个示例显示如何查看激发 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)