在有两个FK的表上的级联删除到同一个表

时间:2011-11-27 16:25:48

标签: sql-server foreign-keys cascade

我有一个名为Friends的关系,其中包含以下列

User1ID   
User2ID
Since

User1IDUser2ID是关系中的一组主键。它们也是引用表Users的外键。现在我想添加一个ON CASCADE DELETE,这样当表User的用户被删除时,表Friends中的相应行也会被删除。但是,MS SQL Server不允许我添加该约束。

有关如何修改表格的任何想法,以完成该任务?

1 个答案:

答案 0 :(得分:6)

你不能有多个或循环的级联路径:你想要做的事情变得模棱两可(比如一个CASCADE NULL和另一个CASCADE DELETE)

我使用存储过程首先从Friends中删除Users然后从BEGIN TRAN DELETE Friends WHERE User1ID = @UserID; DELETE Friends WHERE User2ID = @UserID; DELETE Users WHERE UserID = @UserID; COMMIT TRAN 删除(当然是在TRY / CATCH中处理错误)

{{1}}