【问题标题】:Deleting and restoring foreign key values in SQL Server database table删除和恢复 SQL Server 数据库表中的外键值
【发布时间】:2018-09-08 04:29:45
【问题描述】:

我正在将 XML 文件内容加载到 SQL Server 数据库中的表中,为此我想删除 SQL Server 数据库中表 dbo.Accounting 的内容,该表以 APC_PK_ID 作为其主键,然后从 xml 文件中加载回其内容。

但有一条消息显示:

DELETE 语句与 REFERENCE 约束“FK__Inventori__Accou__29CC2871”冲突。冲突发生在数据库“PAModel”、表“dbo.Inventories”、列“APC_PK_ID”中。 声明已终止。

所以现在我发现我必须分别从dbo.Inventories 表中删除APC_PK_ID 的列内容。

但我关心的一点是,是否可以恢复dbo.Inventories表中APC_PK_ID的内容,就像删除之前一样?

如果碰巧有方法,会不会有数据丢失或者数据加载回来的问题?

感谢您检查问题。

【问题讨论】:

  • 要么您必须删除外键约束,要么将 FK 列中的所有值设置为 null。

标签: sql-server


【解决方案1】:

您不需要删除 (DROP) 外键约束,您可以使用 NOCHECK CONSTRAINT 禁用它:

ALTER TABLE dbo.Inventories NOCHECK CONSTRAINT FK__Inventori__Accou__29CC2871

更改后,再次启用:

ALTER TABLE dbo.Inventories WITH CHECK CHECK CONSTRAINT FK__Inventori__Accou__29CC2871

当然,如果有任何不一致的数据,您将无法启用约束

【讨论】:

    【解决方案2】:

    这是一个很常见的话题: How can foreign key constraints be temporarily disabled using T-SQL?

    启用/禁用约束不会导致数据丢失。 但是,如果您有数据不一致,则无法重新启用它们。 例如,子表记录是指父表的缺失记录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多