微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 更改表添加具有默认值和FK的列,该值在FK参考数据中不存在

这是我的表:

会员ID,….

产品:Id,….

我的会员表有一些值,如果他们的Id = 0我不想添加Id = 0的任何成员,所以我尝试运行这个脚本:

ALTER TABLE [Product]
ADD [Member_Id] BIGINT  NOT NULL  DEFAULT(0),CONSTRAINT [FK_Product_Member] FOREIGN KEY ([Member_Id]) REFERENCES [Member];

所以有一个错误

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Product_Member".

所以我试试这个:

SET IDENTITY_INSERT [Member] ON
INSERT INTO [Member] ([Id]) VALUES  (0);
SET IDENTITY_INSERT [Member] OFF

ALTER TABLE [Product]
ADD [Member_Id] BIGINT  NOT NULL  DEFAULT(0),CONSTRAINT [FK_Product_Member] FOREIGN KEY ([Member_Id]) REFERENCES [Member];

DELETE FROM [Member] WHERE [Member].[Id] = 0;

那么新的错误是:

The DELETE statement conflicted with the REFERENCE constraint "FK_Product_Member".

如果我再次尝试创建所有表,那么当然丢失我的数据时,每件事都可以,所以需要备份,创建表和恢复数据.那么这种情况有没有办法改变Table?你的建议是什么?

解决方法

您可以在引用表中使用的唯一“值”,即不强制执行外键约束,为NULL.不是0,或任何其他魔法值.

所以显而易见的解决方案是允许NULL:

ALTER TABLE [Product]
ADD [Member_Id] BIGINT  NULL,CONSTRAINT [FK_Product_Member] FOREIGN KEY ([Member_Id]) REFERENCES [Member];

原文地址:https://www.jb51.cc/mssql/75215.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐