在本教程中,将学习如何使用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
语句来禁用触发器。