【问题标题】:MSSQL Foreign Key Relationship and Null valuesMSSQL 外键关系和空值
【发布时间】: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


【解决方案1】:

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

显然这行不通。

我修复了语句以使用 [data] 表中的正确字段,一切都很好。

【讨论】:

  • 您可以接受自己的答案,以向他人表明您的问题得到了满意的答案。
猜你喜欢
  • 2015-07-10
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2012-02-29
相关资源
最近更新 更多