ENABLE TRIGGER (Transact-SQL)

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

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

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

schema_name
触发器所属架构的名称。 不能为 DDL 或登录触发器指定 schema_name。

trigger_name
要启用的触发器的名称。

ALL
指示启用在 ON 子句作用域中定义的所有触发器。

object_name
对其创建了要执行的 DML 触发器 trigger_name 的表或视图的名称。

DATABASE
对于 DDL 触发器,指示所创建或修改的 trigger_name 将在数据库作用域内执行。

ALL SERVER
适用于:SQL Server 2008 (10.0.x) 及更高版本。

对于 DDL 触发器,指示所创建或修改的 trigger_name 将在服务器作用域内执行。 ALL SERVER 也适用于登录触发器。

注意

此选项在包含数据库中不可用。

备注

启用触发器并不是要重新创建它。 禁用的触发器仍以对象形式存在于当前数据库中,但并不触发。 启用触发器将导致在运行触发器最初编程时所针对的任何 Transact-SQL 语句时触发。 可以使用 DISABLE TRIGGER 禁用触发器。 此外,还可以通过使用 ALTER TABLE 来禁用或启用为表定义的 DML 触发器。

权限

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

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

示例

A. 在表中启用 DML 触发器

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

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

B. 启用 DDL 触发器

以下示例会创建具有数据库作用域的 DDL 触发器 safety,并且先禁用然后再启用该触发器。

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 触发器。

适用于:SQL Server 2008 (10.0.x) 及更高版本。

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)