परिदृश्य:
आपने प्राथमिक-विदेशी कुंजी संबंध के बिना दो टेबल dbo.Customer और dbo.Orders बनाए हैं। टेबल बनाने के बाद आपने कुछ रिकॉर्ड डाले। बाद में आपको एहसास हुआ कि आपको विदेशी कुंजी प्रतिबंध जोड़ना था। जब आपने dbo.Orders तालिका को बदलने का प्रयास किया, तो आपको त्रुटि प्राप्त हुई। .ग्राहक (ग्राहक आईडी INT प्राथमिक कुंजी, FName VARCHAR (100), LName VARCHAR (100), SSN VARCHAR (10)) तालिका dbo बनाएं। CustomerId int ) नीचे दी गई स्क्रिप्ट का उपयोग करके नमूना रिकॉर्ड सम्मिलित करें।dbo में डालें। 00') dbo.Orders में INSERT करें (OrderItemName,OrderItemAmt,Customerid) मान ('TV',2,2)आइए अब विदेशी कुंजी प्रतिबंध जोड़ें
तालिका dbo बदलें। आदेश प्रतिबंध जोड़ें Fk_CustomerId विदेशी कुंजी(CustomerId) संदर्भ dbo.Customer(CustomerId)जब हम उपरोक्त स्क्रिप्ट को निष्पादित करते हैं, तो हमें त्रुटि मिलती है।
Msg 547, Level 16, State 0, Line 31
ALTER TABLE स्टेटमेंट विदेशी कुंजी बाधा "Fk_CustomerId" के विपरीत है। डेटाबेस "YourDatabaseName", टेबल "dbo.Customer", कॉलम 'Customerid' में विरोध हुआ। मान एक दूसरे से मेल नहीं खाते। यही कारण है कि हमें उपरोक्त त्रुटि मिली है।
समाधान:
1) दूसरी तालिका में डेटा ठीक करें (dbo.Orders) हम दूसरी तालिका में डेटा को ठीक कर सकते हैं और CustomerId कॉलम मानों को अपडेट कर सकते हैं। एक बार जब हमारे पास सही डेटा होगा जो हमारी प्राथमिक तालिका ( Dbo.Customer.CustomerId) से मेल खाता है, तो यह हमें बिना किसी समस्या के विदेशी कुंजी बाधा बनाने देगा।2) Nocheck के साथ Alter तालिका का उपयोग करें (मौजूदा डेटा को अनदेखा करें) ) यदि आप मौजूदा डेटा के संबंध की परवाह नहीं करते हैं। आप तालिका विवरण में परिवर्तन के साथ NoCheck के साथ उपयोग कर सकते हैं और यह डेटा को मान्य करने और विदेशी कुंजी बाधा बनाने के लिए चेक को अनदेखा कर देगा। एक बार विदेशी कुंजी बाधा बन जाने के बाद, यह सम्मिलित किए गए किसी भी नए रिकॉर्ड के लिए अखंडता को लागू करेगा। पूर्व>
वीडियो डेमो