在本教學中,將學習如何使用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聚合函數