DISABLE TRIGGER (Transact-SQL)

禁用触发器。

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

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

语法

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 将在数据库范围内执行。

  • ALL SERVER

    适用于:SQL Server 2008 到 SQL Server 2014。

    对于 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 权限。

示例

A.禁用对表的 DML 触发器

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

USE AdventureWorks2012;
GO
DISABLE 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

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

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

USE AdventureWorks2012;
GO
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)