SQL Server关系表parent->子级和循环级联

时间:2014-04-09 14:37:12

标签: sql sql-server sql-server-2012

我有一个sql表(让我们称之为Person),例如:

表人

Id  Firstname  Lastname

我想与这个人(父/子关系)的somme建立关系,所以我建造了另一个表(让我们称之为Person_Relation):

TABLE Person_Relation

Id_person_parent   Id_person_child

我做了一个约束,以避免parent = child(它会很尴尬!)的情况,现在我尝试制作外键beetwen表Person和表Person_Relation。我目前能够制作一个外键,但是当我尝试设置第二个我得到:可能导致周期或多个级联路径错误。

当删除Person中的条目时,知道我会保持'删除级联'以自动删除Person_Relation表中的链接,是否有任何干净的解决方案可以做到这一点?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

SQL Server不允许您创建理论上可能发生冲突的多个级联路径。有关详情,see this answer

仍然可以实现目标的一种方法是使用触发器代替具有级联操作的外键。

CREATE TRIGGER dbo.Person_Delete
ON dbo.Person
FOR DELETE
AS
  DELETE dbo.Person_Relation 
  WHERE Id_person_parent IN (SELECT Id FROM deleted)
    OR Id_person_child IN (SELECT Id FROM deleted);