這是一個表的結構: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