为什么在SQL Server中启用时不应该违反外键?
我们有两个表,Order Header
和Order 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约束时,默认情况下会检查数据一致性