为什么在启用时不应该违反外键



为什么在SQL Server中启用时不应该违反外键?

我们有两个表,Order HeaderOrder Detail

Order header表的OrderID列引用OrderDetail表的OrderID列。

然后,我将使用一些数据从生产数据库迁移到这些表。我只是禁用了这些表外键约束,并插入了来自生产Db的数据。

插入数据后,订单明细表的OrderID列包含值101,102,103,但订单标题表的Order ID列仅包含值100

然后,我尝试使用以下t-sql代码启用外键约束

exec sp_msforeachtable "ALTER TABLE ? CHECK CONSTRAINT ALL"

为什么在启用时不应该使用现有数据违反外键?

当您从与FKey连接的多个表中移动数据时,您应该:

  • 或保留两个表中的键值
  • 或在移动时发布新值以更改引用表中相应的FKey列

启用FKey约束时,默认情况下会检查数据一致性

相关内容

最新更新