我正在一個側項目,以刪除行及其在自引用表中的所有的後代,我使用 遞歸CTE這樣的觸發器中:使用CTE在自引用表中遞歸刪除行。過程如何進行?
CREATE TRIGGER dbo.tr_Comment_Delete
ON dbo.Comment INSTEAD OF DELETE
AS
;WITH IDs AS (
SELECT id FROM DELETED
UNION ALL
SELECT c.id
FROM Comment AS c INNER JOIN IDs AS i
ON c.parent_comment_id = i.id
)
DELETE FROM Comment
WHERE id IN (SELECT id FROM IDs);
GO
這是自引用表
雖然我有這樣的代碼工作正常,它是指在其中做一些情形之一的,但你不能肯定 它是如何工作的。
更準確地說,我想知道的是,通過使用此遞歸CTE(ID),我能夠避免參考完整性錯誤 當我嘗試刪除具有子註釋的評論時?
什麼是評論被刪除的過程/順序?
採取的評論此層次結構爲例:
3-> 8-> 13
這裏ID 3的評論是根評論。評論8是對評論3的回覆,就像評論13是對評論8的回覆。
刪除過程如何實際發生?
P.S.我嘗試添加一個表格,我在其中插入了他們計算的ID。不幸的是我無法理解它。 這些都是這種表的結果:
id ins-date
3 2017-09-12 11:48:38.037
8 2017-09-12 11:48:38.037
13 2017-09-12 11:48:38.037
13 2017-09-12 11:48:38.037
8 2017-09-12 11:48:38.037
13 2017-09-12 11:48:38.037
我認爲dba.se這個優秀的問題是重要的levant:[唯一索引更新和統計行修改計數器](https://dba.stackexchange.com/q/185551/57105)。檢查你的'DELETE'的實際執行計劃,它會告訴你很多細節。 –