本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中获取有关 DML 触发器的信息。 此信息可以包括表上的触发器类型、触发器的名称、其所有者及其创建或修改日期。 如果在创建触发器时未加密触发器,则获取触发器的定义。 可以使用定义来帮助理解触发器如何影响它所定义的表。 此外,还可以了解特定触发器使用的对象。 使用此信息,可以识别在数据库中更改或删除触发器时影响触发器的对象。
本主题内容
准备工作:
若要获取有关 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_owner、 db_ddladmin和 db_securityadmin 固定数据库角色的成员隐式持有。
sys.sql_expression_dependencies
需要对数据库具有 VIEW DEFINITION 权限,对数据库的 sys.sql_expression_dependencies 具有 SELECT 权限。 默认情况下,SELECT 权限仅授予 db_owner 固定数据库角色的成员。 将 SELECT 和 VIEW DEFINITION 权限授予其他用户时,被授权者可以查看数据库中的所有依赖关系。
使用 SQL Server Management Studio
查看 DML 触发器的定义
在 “对象资源管理器” 中,连接到 数据库引擎 的实例,然后展开该实例。
展开您想要的数据库,展开 “表格”,然后展开包含要查看其定义的触发器的表格。
展开 触发器,右键单击所需的触发器,然后单击“ 修改”。 DML 触发器的定义将显示在查询窗口中。
查看 DML 触发器的依赖项
在 “对象资源管理器” 中,连接到 数据库引擎 的实例,然后展开该实例。
展开所需的数据库,展开 “表”,然后展开包含触发器及其要查看的依赖项的表。
展开 触发器,右键单击所需的触发器,然后单击“ 查看依赖项”。
在“对象依赖项”窗口中,若要查看依赖于 DML 触发器的对象,请选择依赖于 <DML 触发器名称>的对象。 对象显示在 “依赖项 ”区域中。
若要查看 DML 所依赖的对象,请选择 DML 触发器名称>所依赖的对象<。 对象显示在 “依赖项 ”区域中。 展开每个节点以查看所有对象。
若要获取有关显示在 “依赖项 ”区域中的对象的信息,请单击该对象。 在“所选对象”字段中,“名称”、“类型和依赖项类型”框中提供了信息。
若要关闭 “对象依赖项 ”窗口,请单击“ 确定”。
使用 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
另请参阅
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)