【问题标题】:ON DELETE NO ACTION constraint in SQL Server databaseSQL Server 数据库中的 ON DELETE NO ACTION 约束
【发布时间】:2012-11-07 12:34:17
【问题描述】:

我想要做的是当我从父表中删除一行以将数据保留在子表中时。

意味着如果我有一个表部门,它是具有两列的父表 - depNodepName,以及具有三列的子表 - emNoemNamedepNo (FK)

我希望能够删除父表中的行,但保留子表中的行(在我的情况下,它与许可证相关联并且是一个好主意,即使用户已被删除)。

我猜ON DELETE NO ACTION 不起作用,因为如果我尝试删除父表中的行,它会给我一个错误。

CASCADESET NULL 在这种情况下不好。

SET Default - 它不起作用,因为我无法设置默认值 - 它可能会有所不同(并且 100% 肯定会如此)。

有什么制作方法吗?

【问题讨论】:

  • 为什么需要保留子数据?你不能把它移到历史表中吗?
  • 不,我需要将数据保留在子表中 - 就像历史表一样。所以如果我删除父表中的行,子表中的FK应该保留。
  • 那你需要从子表中去掉FK约束,有数据不一致的风险。您的建议是糟糕的数据库设计。您应该将这样的子行移动到不同的表中。
  • 好的,如果这是唯一的方法,那我就做,总比数据不一致好。我想这回答了这个问题。

标签: sql-server foreign-keys constraints


【解决方案1】:

保持外键列仍包含原始值的子数据的唯一方法是删除外键约束,这可能会导致添加不一致数据的风险。

我建议创建一个没有外键约束的新表,并在删除之前将子行复制到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2021-05-29
    • 2011-06-15
    • 2023-01-24
    • 2011-08-28
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多