gpt4 book ai didi

sql - 更改表添加具有默认值和 FK 的列,该值在 FK 引用数据中不存在

转载 作者:行者123 更新时间:2023-12-02 15:08:18 29 4
gpt4 key购买 nike

这是我的 table :

成员: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:

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

关于sql - 更改表添加具有默认值和 FK 的列,该值在 FK 引用数据中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10426035/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com