由于模糊冲突,无法添加外键约束

spr*_*t12 2 sql sql-server conflict constraints foreign-keys

试图运行:

ALTER TABLE [dbo].[Table1] ADD
CONSTRAINT [FK_Table1_ScenarioResult] 
FOREIGN KEY ([ScenarioResultID]) REFERENCES [dbo].[ScenarioResult] ([ScenarioResultID]) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

得到此错误:

消息547,级别16,状态0,行1 ALTER TABLE语句与FOREIGN KEY约束"FK_Table1_ScenarioResult"冲突.冲突发生在数据库"8362",表"dbo.ScenarioResult",列'ScenarioResultID'中.

我检查过 :

  • 约束尚不存在,并且同一列上不存在其他约束
  • 列中的值在两个表中都匹配
  • 列的类型是相同的
  • 尝试了一个不同的名字,也失败了

上 SQL Server 2008 R2

我有什么想法可以试试吗?

Rei*_*ica 7

理论上这可能有效:

ALTER TABLE [dbo].[Table1] WITH NOCHECK ADD
CONSTRAINT [FK_Table1_ScenarioResult] 
FOREIGN KEY ([ScenarioResultID]) REFERENCES [dbo].[ScenarioResult] ([ScenarioResultID]) 
ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

不确定如何检查现有值的完整性,但它应该是:

SELECT COUNT(*) as Orphans FROM [dbo].[Table1] t 
WHERE NOT EXISTS 
  (SELECT * FROM [dbo].[ScenarioResult] WHERE ScenarioResultID = t.ScenarioResultID)
Run Code Online (Sandbox Code Playgroud)

如果"孤儿"大于零则需要在添加约束之前清理数据.