我有一個包含樹狀結構表SQL Server觸發器遞歸在級聯刪除
它採用的形式:
-nodeID,fkID,parentNode
(parentNode爲NULL如果它是它的父節點的根,並且它是子節點) (如果它不是根,fkID爲NULL)
fkID是一個FK,當它在另一個表中刪除時,將其刪除級聯到該表中。然而,這種級聯刪除僅引用根節點。對數據庫還有一個限制,在該數據庫中,除非首先刪除其子節點,否則無法刪除根節點。但是我無法級聯自引用約束,因爲SQL SERVER不能給我這個選項。我認爲觸發器可能是一個很好的解決方案,但是我必須首先對樹進行遞歸,並在父母面前刪除孩子。這將需要我在級聯發生之前刪除。有沒有一個好的方法來做到這一點?
我已經收到以下錯誤以下觸發
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.deleteChildren
ON dbo.faultTreeNodes
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
-- Insert statemets for trigger here
END
GO
錯誤:
CANNOT CREATE TRIGGER INSTEAD OF DELETE BECAUSE THIS
TABLE HAS A FOREIGN KEY WITH A CASCADING DELETE
預先感謝您的任何建議或幫助!
我想,如果我是你的鞋子,你所遇到的問題會讓我重新考慮數據模型。非常有趣的問題,但。 – DMason
[SQL Server:自引用FK,觸發器而不是ON DELETE CASCADE]的可能重複(http://stackoverflow.com/questions/1783700/sql-server-self-reference-fk-trigger-instead-of-on -delete級聯) – GSerg