首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >几个外键和级联删除SQL Server

问几个外键和级联删除SQL Server
EN

Stack Overflow用户
提问于 2015-04-12 02:03:05
回答 1查看 297关注 0票数 3

​

​

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

在上面的图表中,您可以看到用户表和任务表(西班牙语中的“Tareas”)。因此,当用户被删除时,我需要将任务中的标记字段设置为NULL。

这在数据库中是很常见的,所以我想有一种方法来处理这个问题。

在我的例子中,我的大多数表都有一对字段,保存创建或修改记录的用户的UserId。所以,我需要解决这个模式来应用几个地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-01 22:54:02

级联删除意味着,在您的情况下,如果您删除一个用户,那么Server也将删除任何附加的任务。也就是说,整个行将被删除。除了数据的意外损失、引用完整性的丢失或无限递归删除的可能性等问题外,这种行为无论如何也不是您想要的。您已经声明只希望将任务表中的关联用户列标记为空。

作为建议,您考虑过实现触发器吗?像这样的东西(还没有测试过这个,把它当作伪代码!):

代码语言:javascript
复制
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表中添加一个位字段,以指示此人是否处于活动状态/已被删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29585164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档