【发布时间】:2021-02-11 17:01:32
【问题描述】:
我正在使用MS SQL Server 2016,在那里我实现了instead of delete 触发器。它看起来像这样:
ALTER TRIGGER MyTrigger ON MyTable INSTEAD OF DELETE AS
BEGIN
IF --some condition
BEGIN
RAISERROR ('Error msg', 16, 1)
ROLLBACK TRAN
RETURN
END
DELETE MyTable FROM MyTable JOIN deleted ON MyTable.id = deleted.id
END
如果我在表 'MyTable' 上执行 DELETE 语句并且不满足 if 中的条件,则在 if 块之后执行 DELETE 语句。这是绝对正确的。但是在 SSMS 的控制台中,DELETE 语句被执行了两次。所以在控制台中写了以下内容:
(1 rows affected)
(1 rows affected)
我不明白为什么。为什么 SSMS 两次指示一行受到影响?我使用SSMS版本15.0.18338.0。
【问题讨论】:
-
似乎是一种有趣的删除方式,为什么不使用
delete from MyTable where id in (select id from Deleted)? -
@DaleK 我也以这种方式尝试过。仍然得到相同的结果。
标签: sql-server tsql triggers ssms