2016-06-10 65 views
0

我在将外键添加到外键可能为空的现有表时遇到问题。MSSQL外键关系和空值

说我有一个用户表和一个数据表。数据表在“用户表ID列”的“createdBy”列上已经有一个可用的外键。我刚刚在数据表“EditedBy”中添加了第二列,允许空值(表示数据记录尚未编辑)。因此,所有现有记录都具有NULL作为此列的值。

我想在Data.EditedBy和User.Id之间创建一个外键,但是当我尝试应用它时,出现以下错误。

ALTER TABLE语句与FOREIGN KEY约束“FK_Data_User_EditedBy”冲突。冲突发生在数据库“测试”,表“dbo.User”,列'Id'。

它看起来像它有一个数据表中的NULL值的问题,但NULL是一个外键可接受的值。

我缺少什么?

UPDATE: 的发言全文如下

USE [Test] 
GO 

ALTER TABLE [dbo].[Data] WITH CHECK ADD CONSTRAINT [FK_Data_User_EditedBy] FOREIGN KEY([Id]) 
REFERENCES [dbo].[User] ([Id]) 
GO 
+1

显示完整的alter语句以及两个表的相关DDL ... –

+1

这通常意味着您在EditedBy列中具有User.Id中没有匹配值的值。在这里小心点。当您将这种外键创建到用户表时,您必须将外键值设置为NULL,否则您将无法删除用户。 –

+0

肖恩,这就是我到目前为止在网上找到的。但是我刚刚在尝试应用外键之前创建了EditedBy列,因此当前每个存在的记录都有一个NULL值。至于删除用户,我从不删除记录。我有一个删除标志,以便用户帐户可以恢复,以便我可以避免您描述的问题。 –

回答

0

好吧,我觉得自己像个白痴。我使用Management Studio来创建关系,并且在我发布了等效的alter语句之后(我也没有发现这个语句),我意识到我试图在[data]的ID字段和ID字段之间建立一个外键[用户]。

很明显,这将无法正常工作。

我修正了声明在[data]表中使用了正确的字段,一切都很好。

+0

你可以接受你自己的答案,向别人展示你的问题有一个满意的答案。 – philipxy