这是我的表:
会员: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?你的建议是什么?
答案 0 :(得分:12)
您在引用表中可以拥有的唯一“值”,即不强制执行外键约束,是NULL
。不是0
,或任何其他魔法值。
所以显而易见的解决方案是允许NULL
s:
ALTER TABLE [Product]
ADD [Member_Id] BIGINT NULL,
CONSTRAINT [FK_Product_Member] FOREIGN KEY ([Member_Id]) REFERENCES [Member];
答案 1 :(得分:0)
你的“alter table”是更好的方法。但是首先你要添加值为“0”的表,这是“FOREIGN KEY”,但你没有一个值为“0”的成员,所以你得到错误。
作为知道的最佳方式是.alter表,然后将新值设为真值,然后更改列并将其设置为“FOREIGN KEY”