Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 由于模糊冲突,无法添加外键约束_Sql_Sql Server_Foreign Keys_Constraints_Conflict - Fatal编程技术网

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

Sql 由于模糊冲突,无法添加外键约束,sql,sql-server,foreign-keys,constraints,conflict,Sql,Sql Server,Foreign Keys,Constraints,Conflict,正在尝试运行: ALTER TABLE [dbo].[Table1] ADD CONSTRAINT [FK_Table1_ScenarioResult] FOREIGN KEY ([ScenarioResultID]) REFERENCES [dbo].[ScenarioResult] ([ScenarioResultID]) ON DELETE CASCADE 获取此错误: Msg 547,第16级,状态0,第1行 ALTER TABLE语句与外键约束“FK_Table1_Scenario

正在尝试运行:

ALTER TABLE [dbo].[Table1] ADD
CONSTRAINT [FK_Table1_ScenarioResult] 
FOREIGN KEY ([ScenarioResultID]) REFERENCES [dbo].[ScenarioResult] ([ScenarioResultID]) ON DELETE CASCADE
获取此错误:

Msg 547,第16级,状态0,第1行 ALTER TABLE语句与外键约束“FK_Table1_ScenarioResult”冲突。冲突发生在数据库“8362”、表“dbo.ScenarioResult”、列“ScenarioResultID”中。

我查过:

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


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

理论上这可能行得通:

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)

如果“孤立项”大于零,您需要在添加约束之前清理数据。

这一点也让我感到困惑,然后硬币掉了

我试图在SQLServer2012中使用“数据库图”创建外键,但它拒绝了我,因为它声称与我试图创建的外键冲突。嗯

但是,我接受了默认设置“强制外键约束”。但是我在试图为其创建外键的两个表中已经有了数据,它破坏了我试图制定的外键规则,因此SQL Server拒绝了新的键

解决方案(在这种特殊情况下)是将“强制外键约束”更改为“”,或者至少在我清理数据之前

希望这有帮助。

我也有同样的问题 我清除要编辑内容的表的数据,并添加新的外键约束,然后重试。 它对我有用。
我希望它能帮助你

@Bulat我试图把
NOCHECK
放在上面的命令中,但不知道如何把它放在上面的命令中,如果我把它放在
CONSTRAINT
之前,会给我一个语法错误示例:用NOCHECK ADD CONSTRAINT exd\u check更改表dbo.doc\u exd(列a>1);是否可以发布一个查询,用于查看外键中的所有值是否与主键匹配