DISABLE TRIGGER (Transact-SQL)

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

禁用触发器。

Transact-SQL 语法约定

语法

DISABLE 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 子句作用域中定义的所有触发器。

注意

SQL Server 在为合并复制发布的数据库中创建触发器。 在已发布数据库中指定 ALL 可禁用这些触发器,这样会中断复制。 在指定 ALL 之前,请验证没有为合并复制发布当前数据库。

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

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

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

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

注意

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

备注

默认情况下,创建触发器后会启用触发器。 禁用触发器不会删除该触发器。 该触发器仍然作为对象存在于当前数据库中。 但是,当执行编写触发器程序所用的任何 Transact-SQL 语句时,不会激发触发器。 可以使用 ENABLE TRIGGER 重新启用触发器。 还可以通过使用 ALTER TABLE 来禁用或启用为表定义的 DML 触发器。

使用 ALTER TRIGGER 语句更改触发器将启用此触发器。

权限

若要禁用 DML 触发器,用户必须至少对为其创建触发器的表或视图具有 ALTER 权限。

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

示例

本文需要 AdventureWorks2022 示例数据库,其可从 Microsoft SQL Server 示例和社区项目主页下载。

A. 禁用对表的 DML 触发器

以下示例禁用对表 uAddress 创建的触发器 Person

DISABLE 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  

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

下例禁用在服务器范围内创建的所有 DDL 触发器。

DISABLE Trigger ALL ON ALL SERVER;  
GO  

另请参阅

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