我有一个包含树状结构表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