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聚合函數