【问题标题】:Why should not violate foreign key while enable?为什么在启用时不应该违反外键?
【发布时间】:2012-02-12 23:02:32
【问题描述】:

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

我们有两个表,Order HeaderOrder Detail

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

然后我打算将一些数据从生产数据库迁移到这些表。 我只是禁用了这些表外键约束并从生产数据库中插入数据。

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

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

exec sp_msforeachtable "ALTER TABLE ? CHECK CONSTRAINT ALL"

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

【问题讨论】:

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


    【解决方案1】:

    当您从使用 FKey 连接的多个表中移动数据时 - 您应该:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 2014-10-24
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      相关资源
      最近更新 更多