INSERT कथन FOREIGN KEY बाधा - SQL सर्वर के साथ विवादित है


225

मुझे निम्नलिखित त्रुटि प्राप्त हो रही है। कृपया आप मेरी मदद कर सकते हैं?

Msg 547, लेवल 16, स्टेट 0, लाइन 1
INSERT स्टेटमेंट फॉर्म्ड कुंजी बाधा "FK_Sup_Item_Sup_Item_Cat" के साथ विवादित है। डेटाबेस "dev_bo", तालिका "dbo.Sup_Item_Cat" में संघर्ष हुआ। बयान समाप्त कर दिया गया है।

कोड:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')

अंतिम कॉलम client_idत्रुटि का कारण बन रहा है। मैंने उस मूल्य को रखने की कोशिश की जो पहले से ही dbo.Sup_Item_Catकॉलम में मौजूद है , जो सुपरमिटम के अनुरूप है .. लेकिन कोई खुशी नहीं :-(


20
आपने अपने आइटम तालिका में एक रिकॉर्ड सम्मिलित करने का प्रयास किया है जिसमें आपकी Sup_Item_Catतालिका में मिलान श्रेणी रिकॉर्ड नहीं है । इसके बारे में कहने के लिए और कुछ नहीं।
मार्टिन स्मिथ

1
तो आप कह रहे हैं कि SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'रिटर्न के परिणाम?
मार्टिन स्मिथ

2
इसके अलावा आप कहते हैं "अंतिम कौलम" client_id "मैं संघर्ष कर रहा हूं।" यह वह नहीं है जो त्रुटि संदेश का अर्थ है कि मुझे लगता है कि आप अपनी समस्या के लिए गलत जगह देख रहे हैं।
मार्टिन स्मिथ

जवाबों:


287

आपकी तालिका में dbo.Sup_Item_Cat, इसमें किसी अन्य तालिका के लिए एक विदेशी कुंजी संदर्भ है। जिस तरह से एफके काम करता है वह उस कॉलम में मान नहीं रख सकता है जो संदर्भित तालिका के प्राथमिक कुंजी कॉलम में भी नहीं है।

यदि आपके पास SQL ​​सर्वर प्रबंधन स्टूडियो है, तो इसे खोलें और sp_help' dbo.Sup_Item_Cat'। देखें कि कौन सा स्तंभ FK चालू है, और वह किस स्तंभ का संदर्भ देता है। आप कुछ खराब डेटा डाल रहे हैं।

मुझे पता है अगर आप की जरूरत है कुछ भी बेहतर समझाया!


10
Sp_help कमांड को शामिल करने के लिए धन्यवाद! मेरी इसी तरह की समस्या को कम करने में मेरी मदद की।
Ga

वास्तव में - मेरे मामले में, संपत्ति को केवल नियंत्रक से वापस नहीं भेजा जा रहा था, इसलिए यह हमेशा 0 था (जो एक वैध आईडी नहीं था, लेकिन नियंत्रक के पास यह जानने का कोई तरीका नहीं होगा।)
नीनाम

1
Alt + F1, sp_help के लिए शॉर्टकट है, भविष्य के पाठकों के लिए, तालिका का चयन करें और alt + f1
satsvelke

133

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

चेक किए गए उत्तर के सही होने के बावजूद:

माइक एम ने लिखा-

"जिस तरह से एक एफके काम करता है वह उस कॉलम में मान नहीं रख सकता है जो संदर्भित तालिका के प्राथमिक कुंजी कॉलम में भी नहीं है।"

इस जवाब से क्या गायब है बस;

आपको प्राथमिक कुंजी वाली तालिका का निर्माण करना चाहिए।

कहने का एक और तरीका है;

विदेशी कुंजी वाले बच्चे की तालिका में डेटा सम्मिलित करने का प्रयास करने से पहले, आपको प्राथमिक कुंजी वाले मूल तालिका में डेटा सम्मिलित करना होगा।

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

अगर कोई इसे नीचे पढ़ता है। मुझे उम्मीद है कि इससे चेक किए गए उत्तर को अधिक स्पष्ट बनाने में मदद मिलेगी। मैं जानता हूं कि आप में से कुछ लोग हैं जो महसूस कर सकते हैं कि इस तरह की बात बहुत सीधी है और किताब खोलने से पहले इस सवाल का जवाब दिया जाना चाहिए था, लेकिन सच्चाई यह है कि हर कोई एक ही तरह से नहीं सीखता है।


AND मैं जोड़ूंगा, अपनी क्वेरी को प्रोफाइल करना सुनिश्चित करें क्योंकि यह हमेशा वह नहीं भेज रहा है जो आपको लगता है कि यह डेटाबेस के लिए होना चाहिए।
HLGEM

20

आप विदेशी तालिका में मौजूद विदेशी कुंजी कॉलम के मान के साथ एक रिकॉर्ड सम्मिलित करने का प्रयास कर रहे हैं।

उदाहरण के लिए: यदि आपके पास बुक्स और ऑथर्स टेबल हैं, जहां ऑथर्स टेबल पर बुक्स की एक विदेशी कुंजी बाधा है और आप एक बुक रिकॉर्ड सम्मिलित करने का प्रयास करते हैं जिसके लिए कोई लेखक रिकॉर्ड नहीं है।


16

आपको अधिक स्पष्टीकरण के लिए अपना बयान पोस्ट करना होगा। परंतु...

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


5

समस्या client_id के साथ नहीं है जो मैं देख सकता हूं। ऐसा लगता है कि समस्या 4 कॉलम, sup_item_cat_id के साथ है

मै दौडूंगा

sp_helpconstraint sup_item

और विदेशी कुंजी FK_Sup_Item_Sup_Item_Cat के लिए दिए गए बाधा कॉलम पर ध्यान दें कि यह पुष्टि करने के लिए कि कौन सा कॉलम वास्तविक समस्या है, लेकिन मुझे पूरा यकीन है कि यह वह नहीं है जिसे आप ठीक करने की कोशिश कर रहे हैं। इसके अलावा '123123' संदिग्ध लग रहा है।


5

मुझे कुछ ऐसा लगा कि सभी क्षेत्रों को बिल्कुल मेल खाना है।

उदाहरण के लिए, 'कैट डॉग' भेजना 'कैटडॉग' भेजने के समान नहीं है।

मैंने इस समस्या का निवारण करने के लिए FK कोड को उस तालिका से बाहर निकालने के लिए किया था जिसमें मैं डेटा सम्मिलित कर रहा था, "विदेशी कुंजी" पर ध्यान दें जिसमें बाधाएं थीं (मेरे मामले में 2 थे) और उन 2 फ़ील्ड मानों का मिलान सुनिश्चित करें वास्तव में जैसा कि वे तालिका में थे जो FK बाधा त्रुटि फेंक रहे थे।

एक बार जब मैंने अपनी समस्याओं को देते हुए 2 क्षेत्रों को तय किया, तो जीवन अच्छा था!

यदि आपको बेहतर स्पष्टीकरण की आवश्यकता है, तो मुझे बताएं।


यह वास्तव में मेरी मदद की haha! इस तथ्य को नजरअंदाज कर, मेरे पास एक मुद्दा तय किया! धन्यवाद
Johnathan भूरा

4

मुझे अपने SQL कोड में भी यही त्रुटि मिली, यह समाधान मेरे लिए काम करता है,


प्राथमिक तालिका में डेटा की जांच करें क्या आप एक स्तंभ मान में प्रवेश कर रहे हैं जो प्राथमिक कुंजी कॉलम में मौजूद नहीं है।


3

इसका मतलब वही है जो यह कहता है। आप उस स्तंभ में मान सम्मिलित करने का प्रयास कर रहे हैं जिसमें उस पर FK बाधा है जो लुकअप तालिका में किसी भी मान से मेल नहीं खाता है।


2

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


2
  1. sp_helpconstraint चलाएं
  2. विदेशी कुंजी के लिए वापस लौटे constraint_keys कॉलम के लिए ध्यान दें

2

मूल तालिका डेटा अनुपलब्ध समस्या का कारण बनता है। आपकी समस्या में "dbo.Sup_Item_Cat" में डेटा की अनुपलब्धता समस्या का कारण बनती है


1

जब मैं MVC 5 एप्लिकेशन के लिए अपने डेटाबेस का निर्माण करने के लिए कोड-प्रथम माइग्रेशन का उपयोग करता था तो मुझे भी यही समस्या थी। मैं अंततः अपने विन्यास में बीज विधि पाया। इस मुद्दे को पैदा करने के लिए फ़ाइल। मेरी बीज विधि मिलान प्राथमिक कुंजी के साथ प्रविष्टि बनाने से पहले विदेशी कुंजी वाली तालिका के लिए एक तालिका प्रविष्टि बना रही थी।


1

मैं इस समस्या में भाग गया जब मेरे सम्मिलित मूल्य क्षेत्रों में टैब और रिक्त स्थान शामिल थे जो नग्न आंखों के लिए स्पष्ट नहीं थे। मैंने एक्सेल में अपनी मूल्य सूची बनाई थी, कॉपी किया था, और इसे एसक्यूएल में चिपकाया था, और मेरे एफके फ़ील्ड पर गैर-मैच खोजने के लिए क्वेरी चला रहा था।

मैच के प्रश्नों का पता नहीं था कि मेरे FK फ़ील्ड में टैब और स्थान थे, लेकिन INSERT ने उन्हें मान्यता नहीं दी और यह त्रुटि उत्पन्न करता रहा।

मैंने एक रिकॉर्ड में FK फ़ील्ड की सामग्री को कॉपी करके और सम्मिलित क्वेरी में चिपकाकर फिर से परीक्षण किया। जब वह रिकॉर्ड भी विफल हो गया, तो मैंने डेटा को करीब से देखा और अंत में टैब / स्पेस का पता लगाया।

एक बार जब मैंने हटाए गए टैब / रिक्त स्थान को साफ कर दिया, तो मेरा मुद्दा हल हो गया। आशा है कि यह किसी की मदद करता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.