7

这是我的桌子:

会员:身份证,...

产品: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 吗?你的建议是什么?

4

2 回答 2

13

您可以在引用表中拥有的唯一“值”,例如不强制执行外键约束,是NULL. 不是0,或任何其他神奇的价值。

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

ALTER TABLE [Product]
ADD [Member_Id] BIGINT  NULL,
CONSTRAINT [FK_Product_Member] FOREIGN KEY ([Member_Id]) REFERENCES [Member];
于 2012-05-03T06:32:15.517 回答
1

您的“更改表”是执行此操作的更好方法。但首先您要添加值为“0”的表,这是“FOREIGN KEY”,但您没有值为“0”的成员,因此您会收到错误。

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

于 2012-05-03T06:31:55.470 回答