【发布时间】:2016-10-11 19:42:29
【问题描述】:
我在将外键添加到外键可以为空的现有表中时遇到问题。
假设我有一个用户表和一个数据表。数据表在用户表 ID 列的“createdBy”列上已经有一个工作外键。我刚刚在数据表“EditedBy”中添加了第二列,它允许空值(意味着数据记录尚未被编辑)。因此,所有现有记录都将 NULL 作为该列的值。
我正在尝试在 Data.EditedBy 和 User.Id 之间创建一个外键,但是当我尝试应用它时,我收到以下错误。
ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Data_User_EditedBy”冲突。冲突发生在数据库“Test”、表“dbo.User”、列“Id”中。
数据表中的 NULL 值似乎有问题,但 NULL 是外键可接受的值。
我错过了什么?
更新: 全文如下
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 值。至于删除用户,我从不删除记录。我有一个删除标志,以便可以恢复用户帐户,这样我就可以避免您描述的问题。
标签: sql sql-server database