SQL Server 2008 外键冲突

3
我们有一个包含许多行的表格。我想在这两个表之间创建外键,但是我遇到了以下错误。
'CMEvent'表已成功保存;'BaseEvent'表无法创建关系'FK_CMEvent_Oid'。ALTER TABLE语句与FOREIGN KEY约束"FK_CMEvent_Oid"冲突。冲突发生在数据库"CMO_RestoredData"中,表"dbo.BaseEvent"中的列'Oid'。

2
你能显示两个表的完整定义吗?你已经验证了子表中是否只包含实际存在于父表中的ID吗? - SchmitzIT
1
问题比较模糊,但通常意味着您正在尝试添加一个外键,其中约束被违反,因为第二个表中不包含所需的关系。提供更多细节,有人可能能够帮助您编写查询以查找缺失的数据。 - PeterJ
这是我的BaseEvent表的一部分 http://screencast.com/t/Hteavy0G 这是我的CMEvent表 http://screencast.com/t/IMK0Mgkv - Elvin Mammadov
你需要展示给我们代码并解释你正在做什么。错误信息只是意味着你正在尝试将一些数据插入到违反外键约束的表中,例如,你正在尝试插入一个在被引用表中不存在的值。 - marc_s
这两个表的列(Oid)数据类型是否相同? - ypercubeᵀᴹ
显示剩余2条评论
1个回答

0

当CMEvent表中存在一行在BaseEvent表中不存在时,我可以复制此错误。

尝试运行此查询:

SELECT * 
FROM CMEvent c
WHERE NOT EXISTS (
  SELECT * 
  FROM BaseEvent
  WHERE oid = c.oid ) 

如果您返回任何行,则必须在应用外键约束之前将它们删除。

如果需要保留这些孤立的行,可以使用 WITH NOCHECK 仅将约束应用于新行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接