尝试运行:
ALTER TABLE [dbo].[Table1] ADD
CONSTRAINT [FK_Table1_ScenarioResult]
FOREIGN KEY ([ScenarioResultID]) REFERENCES [dbo].[ScenarioResult] ([ScenarioResultID]) ON DELETE CASCADE
出现此错误:
消息547,级别16,状态0,第1行 ALTER TABLE语句与FOREIGN KEY约束“FK_Table1_ScenarioResult”冲突。冲突发生在数据库“8362”,表“dbo.ScenarioResult”,列'ScenarioResultID'。
我查了一下:
在SQL Server 2008 R2
我能尝试什么想法?
答案 0 :(得分:7)
理论上这可能有用:
ALTER TABLE [dbo].[Table1] WITH NOCHECK ADD
CONSTRAINT [FK_Table1_ScenarioResult]
FOREIGN KEY ([ScenarioResultID]) REFERENCES [dbo].[ScenarioResult] ([ScenarioResultID])
ON DELETE CASCADE
不确定如何检查现有值的完整性,但应该是:
SELECT COUNT(*) as Orphans FROM [dbo].[Table1] t
WHERE NOT EXISTS
(SELECT * FROM [dbo].[ScenarioResult] WHERE ScenarioResultID = t.ScenarioResultID)
如果"孤儿"如果大于零则需要在添加约束之前清理数据。
答案 1 :(得分:0)
这个令我感到困惑,然后便士掉了下来。
我正在尝试使用"数据库图表"创建外键。在SQL Server 2012中,它拒绝让我声称与我试图创建的外键冲突。嗯?
但是,我接受了默认值" 强制执行外键约束"。但是我已经在我试图创建外键的两个表中有数据了,它打破了我试图制作的外键规则,因此SQL Server拒绝了新密钥。
解决方案(在这种特殊情况下)是改变" 强制执行外键约束"至" 否",或至少在我清理数据之前。
希望这有帮助。
答案 2 :(得分:0)
我有同样的问题 我清除了要在其中编辑内容的表的数据,并添加了新的外键约束并重试。 这个对我有用。 希望对您有帮助。