2012-12-22 103 views
2

我们已经有了很多行的表。我想在这两个表之间创建外键,但是 我收到以下错误。SQL Server 2008外键约定

'CMEvent'表成功保存;
'BaseEvent'表
无法创建关系'FK_CMEvent_Oid'。
ALTER TABLE语句与FOREIGN KEY约束“FK_CMEvent_Oid”冲突。冲突发生于数据库“CMO_RestoredData”,表“dbo.BaseEvent”,列“Oid'.`

+2

你可以显示两个表的完整定义吗?您是否验证过子表只包含实际存在于父表中的ID? – SchmitzIT

+1

含糊不清的问题,但通常意味着你试图添加一个外键违反约束,因为第二个表不包含所需的关系。发布更多详细信息,有人可以通过查询来帮助您查找缺失的数据。 – PeterJ

+0

这是我的BaseEvent表的一部分http://screencast.com/t/Hteavy0G这是我的CMEvent表http://screencast.com/t/IMK0Mgkv –

回答

0

我能重复这个错误时,我曾在CMEvent表中的行未在存在BaseEvent。

尝试运行此查询:

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

如果你得到任何行回来,这些都会被删除,然后才能应用外键约束。

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