启用时为什么不违反外键?

时间:2012-01-18 07:21:57

标签: sql-server sql-server-2008 sql-server-2005 foreign-keys foreign-key-relationship

为什么在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"

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

1 个答案:

答案 0 :(得分:3)

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

  • 或保留两个表中的键值
  • 或移动时在引用表中更改适当的FKey列的新值

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