几个外键和级联删除SQL Server

时间:2015-04-12 02:03:05

标签: sql-server foreign-key-relationship sql-delete

enter image description here

在SQL Server 2014中,我尝试在3 FK上添加 CASCADE DELETING 。如果我在一个关系中添加级联删除,它可以正常工作。如果我添加更多级联删除,则它不起作用(循环检测到错误消息)。

在上图中,您可以看到用户表和任务表(" Tareas"西班牙语)。所以,我需要做的是删除用户时,我需要将Tasks中的标记字段设置为NULL。

这是数据库中常见的东西,所以我认为有办法处理这个问题。

就我而言,我的大多数表都有一对字段,其中包含创建或修改记录的用户的UserId。所以,我需要解决这个模式,将它应用到几个地方。

1 个答案:

答案 0 :(得分:2)

CASCADE DELETE表示在您删除用户的情况下,SQL Server也将删除任何附加的任务。也就是说,整行将被删除。除了数据意外丢失,参照完整性丢失或无限递归删除的可能性等问题之外,这种行为并不是您想要的。您已声明只想将Tasks表中的关联用户列标记为空。

作为建议,您是否考虑过实施TRIGGER?像这样的东西(没有测试过,把它当作伪代码!):

CREATE TRIGGER DeleteTareasTrigger
ON Users
BEFORE DELETE AS
BEGIN

UPDATE t
SET t.CreadaPor = NULL
FROM DELETED as d
INNER JOIN Tareas t ON d.UserID = t.CreadaPor

UPDATE t
SET t.ModifcadaPor = NULL
FROM DELETED as d
INNER JOIN Tareas t ON d.UserID = t.ModifcadaPor

END
GO

或者作为另一种方法,在User表上添加一个位字段,以指示该人是否处于活动状态/已删除。