DISABLE TRIGGER (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 数据库

禁用触发器。

Transact-SQL 语法约定

语法

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

参数

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

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

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

注意

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

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

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

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

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

注意

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

备注

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

通过使用语 ALTER TRIGGER 句更改触发器即可激活该触发器。

权限

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

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

示例

本文中的代码示例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025示例数据库,您可以从 Azure Data SQL Samples Repository 的 GitHub 仓库下载。

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