2012-05-03 10 views
6

में मौजूदा साथ स्तंभ जोड़ें यह मेरे टेबल्स है:ऑल्टर तालिका डिफ़ॉल्ट मान और FK, कि मूल्य नहीं FK संदर्भ डाटा

सदस्य: ईद, ....

उत्पाद: ईद, ....

मेरे Member तालिका कुछ मान आईडी = 0 के साथ कोई भी अगर उन्हें है और मैं ईद = 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". 

अगर मैं सभी टेबल्स फिर से बनाने की कोशिश , मेरे डेटा को खोने के साथ हर चीज ठीक रहेगी, इसलिए बैकअप पाने, टेबल बनाने और डेटा को पुनर्स्थापित करने की आवश्यकता है। तो क्या इस स्थिति के साथ टेबल बदलने का कोई तरीका है? आपका क्या सुझाव है?

उत्तर

0

आपकी "परिवर्तित तालिका" ऐसा करने का बेहतर तरीका है। लेकिन पहले आप तालिका "0" के साथ तालिका जोड़ रहे हैं और यह "विदेशी कुंजी" है लेकिन आपके पास "0" मान वाला सदस्य नहीं है त्रुटि प्राप्त करें।

एक पता है के रूप में सबसे अच्छा तरीका है .alter तालिका है और फिर नए स्तंभ के लिए सही मूल्य बनाने के लिए और फिर स्तंभ में परिवर्तन और "विदेशी कुँजी"

+0

कि काम नहीं किया है – Saeid

+0

आप यह एक अच्छा तरीका नहीं है एक एक और रास्ता है.लेकिन कर सकते हैं (डिफ़ॉल्ट रूप मूल्य के लिए और बदलने की मेज के बाद एक वैध पहचान पत्र का उपयोग करें:

तो स्पष्ट समाधान NULL रों अनुमति देने के लिए है एफके संपादित करें) –

12

केवल "मूल्य" कि आप कर सकते हैं करने के लिए सेट है कि एक संदर्भ तालिका में है, जैसे विदेशी कुंजी बाधा लागू नहीं है, NULL है। 0, या कोई अन्य जादू मान नहीं है।

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

@Dameien_The_Unbeliever मैं 'Null' Value – Saeid

+0

@Saeid की अनुमति नहीं दे सकता - तब आपके पास अपनी विदेशी कुंजी बाधा नहीं हो सकती है। –

+2

@ सेइड: यदि आपके पास एनयूएलएल नहीं हो सकता है, तो उत्पाद के मूल्य के लिए 0 क्या होता है। Member_id का मतलब है? यदि इसका मतलब है "कोई सदस्य नहीं", तो एक शून्य उचित है। विदेशी कुंजी बाधा रखने के लिए यह या तो है या आपको id = 0 के साथ "नकली" सदस्य बनाना है। –

संबंधित मुद्दे