我有以下表结构,它存储了我的应用程序的一些结果。每个层次结构级别都附加了一个数据行,该行再次由多个值组成。数据行专门分配给层次结构表的单个表,而不是并行多个。我的目标是删除Parent
,包括所有层次结构级别,数据和值。
我的第一次尝试是在任何地方添加ON DELETE CASCADE约束,但ON DELETE CASCADE
不适用于菱形结构。结果是:
Introducing FOREIGN KEY constraint 'FK_Data_Hierarchy2' on table 'Data' may cause cycles or cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other KEY constraints.
然后我的第二次尝试是删除Data表上的级联约束,并向Hierarchy 1-3添加INSTEAD OF DELETE
触发器,删除自己行之前的Data条目。但是在那里SQL Server抱怨你不能添加这样的触发器,因为层次结构嵌套有ON DELETE CASCADE
。
Cannot create INSTEAD OF DELETE or INSTEAD OF UPDATE TRIGGER 'TR_Hierarchy1_Delete' on table 'dbo.Hierarchy'. This is because the table has a FOREIGN KEY with cascading DELETE or UPDATE.
我的最后一个计划是删除所有ON DELETE CASCADE
约束并在触发器中手动删除整个树。但这是一个挑战,以优化的方式做到这一点。