繁体   English   中英

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

[英]Alter Table Add Column with Default value And FK, that Value no existing in FK Reference Data

这是我的表:

成员 :Id,....

产品 :Id,....

我的Member表有一些值,如果他们的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 s:

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

你的“alter table”是更好的方法。但是首先你要添加值为“0”的表,这是“FOREIGN KEY”,但你没有一个值为“0”的成员,所以你会得到错误。

知道的最佳方法是.alter表,然后将新值设为真值,然后更改列并将其设置为“FOREIGN KEY”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM