我在将外键添加到外键可能为空的现有表时遇到问题。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
显示完整的alter语句以及两个表的相关DDL ... –
这通常意味着您在EditedBy列中具有User.Id中没有匹配值的值。在这里小心点。当您将这种外键创建到用户表时,您必须将外键值设置为NULL,否则您将无法删除用户。 –
肖恩,这就是我到目前为止在网上找到的。但是我刚刚在尝试应用外键之前创建了EditedBy列,因此当前每个存在的记录都有一个NULL值。至于删除用户,我从不删除记录。我有一个删除标志,以便用户帐户可以恢复,以便我可以避免您描述的问题。 –