【发布时间】:2010-01-12 10:29:39
【问题描述】:
我有下表:
if object_id(N'dbo.Node') is null
create table dbo.Node
(
ID bigint identity primary key,
ParentID bigint null, -- references Node(ID)
DateCreated datetime not null,
LastUpdated datetime not null,
[Name] nvarchar(500) not null,
);
我有这个触发器来实现同一个表中的级联删除:
create trigger Node_Delete on Node for delete
as
begin
delete from Node where ParentID in (select id from deleted)
end
这是我的数据集:
ID ParentID DateCreated LastUpdated Name
534 514 2010-01-12 10:15:03.940 2010-01-12 10:15:03.940 Test 1
535 534 2010-01-12 10:15:08.563 2010-01-12 10:15:08.563 Test 2
536 535 2010-01-12 10:15:12.063 2010-01-12 10:15:12.063 Test 3
537 536 2010-01-12 10:15:18.510 2010-01-12 10:15:18.510 Test 4
现在我执行这个查询:
delete from Node where ID=534
这是生成的数据集:
ID ParentID DateCreated LastUpdated Name
536 535 2010-01-12 10:15:12.063 2010-01-12 10:15:12.063 Test 3
537 536 2010-01-12 10:15:18.510 2010-01-12 10:15:18.510 Test 4
为什么触发器中的 DELETE 语句直到所有下降的记录都被删除后才会递归执行触发器?
编辑:请注意,我在下面发布了一个可行的解决方案,但将另一个答案标记为正确,因为我的问题不是“解决方案是什么”,而是“为什么我这样做的方式不起作用”。
【问题讨论】:
标签: sql-server tsql triggers