2011-03-13 14 views
24

मैं एक मेज के लिए एक विदेशी कुंजी जोड़ने की कोशिश कर रहा हूँ, और यह मुझे निम्न त्रुटि दे:जोड़ा जा रहा है विदेशी कुंजी, एसक्यूएल सर्वर 2008

There are no primary or candidate keys in the referenced table 'tbl_Person' that match the referencing column list in the foreign key 'P_ID'.

मैं एक tbl_Person है, जो के रूप में परिभाषित किया गया है है:

P_ID INT (Primary Key) 
f_Name, 
l_Name 

अन्य तालिका एक टिप्पणी तालिका जो के रूप में परिभाषित किया जाता है:

C_ID INT, 
Comments, 
P_ID (should be the foreign key) 

कई संबंध तालिका में एक एक बनाने के लिए कोशिश कर रहा है, इसलिए जब उपयोगकर्ता एक टिप्पणी जोड़ता है, इसे वापस संदर्भित किया जाता है, साथ ही, वह एक नई टिप्पणी शुरू किए बिना टिप्पणियों में जोड़ सकता है। उम्मीद है कि थोड़ा सा समझ में आता है।

पूर्व: रैंडी बिंग "मैं एसक्यूएल प्यार करता हूं" दर्ज करें, उसकी आईडी 1 है, f_Name रैंडी है, l_Name बिंग है, उसकी टिप्पणियां "मुझे एसक्यूएल पसंद है"। उनकी टिप्पणियों को एक अद्वितीय आईडी स्टोर करना चाहिए, साथ ही साथ अपने P_ID आयात करना चाहिए।

बाद में जब रैंडी उसी सी_आईडी के साथ टिप्पणी में जोड़ना चाहता है जहां P_ID एक नया C_ID बनाये बिना उससे मेल खाता है।

ALTER TABLE tbl_Comments 
ADD CONSTRAINT P_ID 
FOREIGN KEY (P_ID) 
REFERENCES tbl_Person(P_ID) 

Am मैं सही रास्ते पर होने के करीब:

यहाँ कोड है?

+0

आप किस एसक्यूएल का उपयोग कर रहे हैं कृपया? – gbn

+0

टी-एसक्यूएल (एसक्यूएल सर्वर 2008) – jpavlov

+0

घुंघराले ब्रैकेट प्रारूप कोड, y'now – gbn

उत्तर

72

यह त्रुटि आमतौर पर डेटाटाइप्स के बीच "टिप्पणी" और "व्यक्ति" अलग हैं इसका मतलब है, यह मानते हुए वास्तविक संदेश

है एसक्यूएल इस

ALTER TABLE tbl_Comments WITH CHECK ADD 
CONSTRAINT FK_Comments_Person FOREIGN KEY (P_ID) REFERENCES tbl_Person (P_ID) 

इस से मेल खाता है कि तुम क्या जोड़ा जाना चाहिए। तो:

  • जांच डेटाटाइप्स दोनों पूर्णांक
  • हैं सुनिश्चित P_ID tbl_Person
  • (संपादित करें, दिसम्बर 2011) पर प्राथमिक कुंजी मिलान और लंबाई varchar स्तंभ भी
+0

धन्यवाद कि काम किया, मैंने पहली बार यह एक त्रुटि को लात मारने के बाद भी भाग लिया, तो मुझे याद आया कि मैं प्राथमिक सेट करने के बाद टेबल को सहेजना भूल गया था कुंजी ... धन्यवाद। – jpavlov

+1

@jpavlov, अगर @ जीबीएन के उत्तर ने आपकी समस्या हल की है, तो आपको इसे सही उत्तर के रूप में स्वीकार करना चाहिए। (वोट गिनती के नीचे चेकमार्क पर क्लिक करें।) –

4
लिए समान होना चाहिए है

ऑब्जेक्ट एक्सप्लोरर में, डेटाबेस इंजन के उदाहरण से कनेक्ट करें।

मानक बार पर, नई क्वेरी पर क्लिक करें।

उदाहरण कॉलम टेम्पिड पर एक विदेशी कुंजी बनाता है और बिक्री में कॉलर SalesReasonID को संदर्भित करता है। सेल्स रेसन तालिका।

USE AdventureWorks2012; 
    GO 
    ALTER TABLE Sales.TempSalesReason 
    ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) 
    REFERENCES Sales.SalesReason (SalesReasonID) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
    ; 
    GO 
संबंधित मुद्दे