SQL Server禁用触发器

在本教程中,将学习如何使用SQL Server DISABLE TRIGGER语句来禁用触发器。

SQL Server禁用触发器简介

有时,为了进行故障排除或数据恢复,可能需要暂时禁用触发器。要禁用触发器,请使用DISABLE TRIGGER语句:

DISABLE TRIGGER [schema_name.][trigger_name] 
ON [object_name | DATABASE | ALL SERVER]

在这个语法中:

  • 首先,指定触发器所属的模式名称以及DISABLE TRIGGER关键字后要禁用的触发器的名称。
  • 其次,如果触发器是DML触发器,请指定触发器绑定的表名或视图。 如果触发器是DDL数据库范围的触发器,则使用DATABASE;如果触发器是DDL服务器范围的触发器,则使用ALL SERVER

SQL Server DISABLE TRIGGER示例

为了方便演示,创建一个名为sales.members的新表,如以下语句:

CREATE TABLE sales.members (
    member_id INT IDENTITY PRIMARY KEY,
    customer_id INT NOT NULL,
    member_level CHAR(10) NOT NULL
);

以下语句创建一个触发器,只要将新行插入sales.members表中,就会触发该触发器。出于演示目的,触发器只返回一条简单的消息。

CREATE TRIGGER sales.trg_members_insert
ON sales.members
AFTER INSERT
AS
BEGIN
    PRINT '提示:已插入新成员!';
END;

以下语句在sales.members表中插入一个新行:

INSERT INTO sales.members(customer_id, member_level)
VALUES(1,'金钻');

由于触发了INSERT事件,触发器被触发并打印出以下消息:

提示:已插入新成员!

要禁用sales.trg_members_insert触发器,请使用以下DISABLE TRIGGER语句:

DISABLE TRIGGER sales.trg_members_insert 
ON sales.members;

现在,如果在sales.members表中插入新行,则不会触发该触发器。

INSERT INTO sales.members(customer_id, member_level)
VALUES(2,'银钻');

这意味着触发器已被禁用。

请注意,触发器虽然已被禁用,但是它的定义仍然存在于表中。 如果在SQL Server Management Studio(SSMS)中查看触发器,您会注意到已禁用的触发器名称上有一个红叉图标:
禁用触发器

禁用表上的所有触发器

要禁用表上的所有触发器,请使用以下语句:

DISABLE TRIGGER ALL ON table_name;

在此语句中,只需指定表的名称以禁用属于该表上的所有触发器。

以下语句在sales.members表上创建一个新的触发器,该触发器在delete事件之后触发:

CREATE TRIGGER sales.trg_members_delete
ON sales.members
AFTER DELETE
AS
BEGIN
    PRINT 'A new member has been deleted';
END;

要禁用sales.members表上的所有触发器,请使用以下语句:

DISABLE TRIGGER ALL ON sales.members;

下图显示了属于sales.members表的所有触发器的状态:
禁用全部触发器

禁用数据库上的所有触发器

要禁用当前数据库上的所有触发器,请使用以下语句:

DISABLE TRIGGER ALL ON DATABASE;

在本教程中,学习了如何使用SQL Server DISABLE TRIGGER语句来禁用触发器。


上一篇: SQL Server触发器 下一篇: SQL Server聚合函数