这是一个表的结构:Id Name ParentId
SQL:删除所有嵌套自参照记录
ParentId
是一个外键,主列Id
。现在让我们说我有这样几行:(只显示ParentId
来自行)
01
/ \
5 2
/\
3 4
我已经安装InsteadOfDelete
触发,如下图所示:
CREATE TRIGGER [dbo].[tr_tb] ON [dbo].[Some_tb]
INSTEAD OF DELETE
AS
/*Delete from another table*/
DELETE FROM SomeOther_tb WHERE OtherId IN(SELECT Id FROM deleted);
/*Delete childs from this table*/
DELETE FROM Some_tb WHERE ParentId IN(SELECT Id FROM deleted);
/*Delete from this table*/
DELETE FROM Some_tb WHERE Id IN(SELECT Id FROM deleted);
当Id = 01
(记录查询以上孩子的代表性)被删除。只有直接孩子(Id=5,2
)被删除,留下子孩子记录(Id = 3,4
)。
我假设InsteadOfTrigger
功能不会触发子女(Id=5,2
)。
如何解决此问题,以便删除所有嵌套的子节点?
为什么不利用级联删除,因为这似乎正是你在做什么? – UnhandledExcepSean
不能因为多个级联路径:https://www.mssqltips.com/sqlservertip/2733/solving-the-sql-server-multiple-cascade-path-issue-with-a-trigger/ –
所以这是一个自动加入表格? – UnhandledExcepSean