2012-05-03 17 views
6

mevcut FK, o değeri ile Sütun Ekle Bu Benim Tablolar geçerli:Alter Tablo Standart değeri Ve hiç FK Referans Veri

Üye: İd, ....

Ürün: İd, ....

Benim Member Tablo Kimliği = 0 ile onlara eğer bazı değerlerin hiçbiri var ve Id = 0 ile herhangi bir üye eklemek istemiyorum, Bu yüzden bu komut dosyası çalıştırmayı denediğinizde:

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

Yani bir hata vardır:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Product_Member". 

yüzden denemek bu bir: Ardından yeni Hata

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; 

olduğunu

:

The DELETE statement conflicted with the REFERENCE constraint "FK_Product_Member". 

Tekrar tüm Tabloları oluşturmayı denerseniz Verilerimi kaybettiğim her şey elbette tamam olacak, bu yüzden yedeklemeyi almalı, tablolar oluşturmalı ve verileri geri yüklemeliyiz. Bu durumda Tabloyu değiştirmenin herhangi bir yolu var mı? önerin nedir?

cevap

0

"alter tablosu" sizin bunu yapmanın daha iyi bir yoludur. Ama önce "0" değerini içeren tablo ekliyorsunuz ve bu "YABANCI ANAHTAR" dır, ancak "0" değerine sahip bir Üyeniz yok, böylece hata al.

bir know iyi yolu .alter tablodur ve sonra yeni sütuna gerçek değerini yapmak ve sonra sütunu değiştirebilir ve "YABANCI KEY"

+0

çalıştı değil – Saeid

+0

(bu iyi bir yol değildir bir başka way.but yapmak Varsylan değeri ve alter tablodan sonra geçerli bir kimlik kullanabilirsiniz:

Yani bariz çözüm NULL s izin vermektir FK'yi düzenle) –

12

sadece "değer" olabildiğince o set Yabancı anahtar kısıtlaması zorlanmayacak şekilde bir referans tablosuna sahip olmalısınız, NULL. 0 veya başka herhangi bir sihirli değeri değil.

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

@Dameien_The_Unbeliever 'Null' Değeri – Saeid

+0

@Saeid'e izin veremem - bu durumda yabancı anahtar kısıtınız olamaz. –

+2

@Saeid: NULL'lere sahip olamazsanız, Product.Member_id değeri için 0 ne demektir? "Üye yok" anlamına gelirse, bir null uygundur. Ya bu ya da yabancı anahtar kısıtlaması için id = 0 ile "sahte" üye yapmak zorunda. –

İlgili konular