7

これは私のテーブルです:

メンバー: Id, ....

製品: Id, ....

Id = 0 の場合、私のMemberテーブルにはいくつかの値がありません。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".

すべてのテーブルを再度作成しようとすると、データが失われてももちろん問題ないので、バックアップを取得し、テーブルを作成してデータを復元する必要があります。この状況でテーブルを変更する方法はありますか? あなたの提案は何ですか?

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

「alter table」はこれを行うためのより良い方法ですが、最初は値「0」のテーブルを追加していますが、これは「FOREIGN KEY」ですが、値「0」のメンバーがないため、エラーが発生します。

知っている最善の方法は、テーブルを変更し、新しい列に真の値を作成し、列を変更してそれを「FOREIGN KEY」に設定することです

于 2012-05-03T06:31:55.470 に答える