ENABLE TRIGGER (Transact-SQL)

更新日期: 2006 年 12 月 12 日

启用 DML、DDL 或登录触发器。

主题链接图标Transact-SQL 语法约定

语法

 ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]

参数

  • schema_name
    触发器所属架构的名称。不能为 DDL 或登录触发器指定 schema_name
  • trigger_name
    要启用的触发器的名称。
  • ALL
    指示启用在 ON 子句作用域中定义的所有触发器。
  • object_name
    要对其创建要执行的 DML 触发器 trigger_name 的表或视图的名称。
  • DATABASE
    对于 DDL 触发器,指示所创建或修改的 trigger_name 将在数据库范围内执行。
  • ALL SERVER
    对于 DDL 或登录触发器,指示所创建或修改的 trigger_name 将在服务器范围内执行。

备注

启用触发器并不是要重新创建它。禁用的触发器仍以对象形式存在于当前数据库中,但并不激发。启用触发器将导致它在其最初编程时所处的任何事件执行时激发。可以使用 DISABLE TRIGGER 禁用触发器。还可以使用 ALTER TABLE 来禁用或启用为表所定义的 DML 触发器。

权限

若要启用 DML 触发器,用户必须至少对于创建触发器所在的表或视图拥有 ALTER 权限。

若要启用具有服务器范围 (ON ALL SERVER) 的 DDL 或登录触发器,用户必须对服务器拥有 CONTROL SERVER 权限。若要启用具有数据库范围 (ON DATABASE) 的 DDL 触发器,用户至少应在当前数据库中拥有 ALTER ANY DATABASE DDL TRIGGER 权限。

示例

A. 在表中启用 DML 触发器

以下示例禁用在表 Address 中创建的触发器 uAddress,然后再启用它。

USE AdventureWorks;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO
ENABLE Trigger Person.uAddress ON Person.Address;
GO

B. 启用 DDL 触发器

以下示例在数据库范围创建 DDL 触发器 safety,然后禁用该触发器。

IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety ON DATABASE;
GO
CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO
ENABLE TRIGGER safety ON DATABASE;
GO

C. 启用以同一作用域定义的所有触发器

以下示例启用在服务器范围内创建的所有 DDL 和登录触发器。

USE AdventureWorks;
GO
ENABLE Trigger ALL ON ALL SERVER;
GO

请参阅

参考

DISABLE TRIGGER (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
DROP TRIGGER (Transact-SQL)
sys.triggers (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 在此主题中添加了有关在 SQL Server 2005 Service Pack 2 中引入的登录触发器的信息。