SQL Server 2005级联删除

时间:2011-02-14 16:28:30

标签: sql-server sql-server-2005

我不能100%确定级联删除是如何工作的。

我有简化表,看起来像这样

用户 USER_ID

ExtendedUser USER_ID

评论 USER_ID

帖子 USER_ID

我基本上有大量的表引用User的User_ID。我想在一个表上设置级联删除,以便我可以删除User对象并确保删除所有引用User的表。

但是,我的理解是我需要在每个引用User的表上设置删除操作。那就是我需要设置"级联删除"在每个儿童餐桌上。我的理解是否正确?

SQL Server Cascading

更新: 看起来我必须为每个关系设置它。我应该把这些关系视为"存储"?也许我的观念不对。

看起来我可以使用父表中的管理工作室为每个关系设置所有参照完整性规则。

2 个答案:

答案 0 :(得分:8)

对于每种关系,您可以指定要采取的操作。

最简单的方法是使用SQL Server Management Studio。设计父表,找到所有PK-FK关系。

对于每个,选择发生Delete事件时要采用的路径:

  • 无操作 - 这会在发生时导致FK错误
  • 级联 - 删除子记录
  • 设置null - FK列值将为null。当子表中不允许空值时,这会引发错误。
  • 设置默认值 - 如果子表上的FK列具有默认值,则它将是子列中的新值。

enter image description here

答案 1 :(得分:0)

您所描述的内容似乎不好(特别是如果您不强制执行参照完整性)。请考虑以下事项:

您有3个表引用用户表:客户端,员工和访客

如果我理解正确,那么当您删除引用用户记录的客户端记录时,您也希望删除该用户记录(正确吗?)。

如果你这样做并且有一个Employee和Guest记录引用了同一个用户记录,那么它们将突然指向什么(如果你没有强制引用完整性)。

在我看来,如果你有一堆引用User表的表,那么就不应该进行级联删除......