【问题标题】:FOREIGN KEY SAME TABLE error - but foreign key doesn't existFOREIGN KEY SAME TABLE 错误 - 但外键不存在
【发布时间】:2014-11-10 05:10:06
【问题描述】:

我正在尝试添加一个引用同一个表的外键约束。

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Documents_Parent]') AND parent_object_id = OBJECT_ID(N'[dbo].[Documents]'))
BEGIN
    ALTER TABLE [dbo].[Documents]  WITH CHECK ADD  CONSTRAINT [FK_Documents_Parent] FOREIGN KEY(LinkedDocumentId)
    REFERENCES [dbo].[Documents] ([Id])
END

FK_Documents_Parent 的关系不存在。

但是,它会抛出错误:

ALTER TABLE 语句与 FOREIGN KEY SAME TABLE 约束“FK_Documents_Parent”冲突。冲突发生在数据库“dev”、表“dbo.Documents”、列“Id”中。

【问题讨论】:

  • 您确定表中当前没有与外键冲突的数据吗?即:没有没有对应Id的LinkedDocumentId?
  • 尝试从这个表生成一个 CREATE 命令 e 检查约束是否真的不存在。 sys 视图可能有问题。

标签: sql sql-server tsql


【解决方案1】:

如果表已经有数据,列documents_parent中的所有值都应该存在于列id中,否则会报错。

如果我们想允许,你可以使用 WITH NOCHECK

http://technet.microsoft.com/en-us/library/ms177463(v=sql.105).aspx

【讨论】:

  • 表中有错误数据。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-09-08
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 2021-05-14
相关资源
最近更新 更多