2010-04-19 18 views
5

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

जब मैं किसी भी तालिका पर अद्यतन करने का प्रयास करता हूं, तो मुझे 'अद्यतन स्टेटमेंट रेफरेंस बाधा से विवादित होता है ..' जो कि विदेशी कुंजी बाधा को संदर्भित करता है।

मैं इन दोनों टेबलों पर भाषा फ़ील्ड को कैसे अपडेट कर सकता हूं?

+0

ऐसा लगता है कि आपकी 'y' संदर्भित (विदेशी कुंजी) तालिका में मौजूद नहीं है। आपको इसे पहले जोड़ना होगा। – Oded

+1

एसक्यूएल सर्वर? माई एसक्यूएल? आकाशवाणी? और आपके पास परिपत्र एफके है? – gbn

उत्तर

9

यदि आप 1 बार तय कर रहे हैं, तो बाधा छोड़ दें, अद्यतन करें और फिर बाधा को वापस जोड़ें।

यदि आपको एप्लिकेशन के हिस्से के रूप में ऐसा करने की आवश्यकता है, तो एक श्रेणी पंक्ति डालें, उप-श्रेणियां पंक्ति अपडेट करें और फिर मूल श्रेणी पंक्ति हटाएं।

5

आपको बाधाओं को छोड़ने, मानों को अपडेट करने और फिर बाधाओं को फिर से जोड़ने की आवश्यकता है।

+0

ओपी यह नहीं कहता कि यह व्यापार तर्क का एक समय या हिस्सा है या नहीं। यह विधि एक बार रूपांतरण के लिए अच्छा है, लेकिन आवेदन आधारित लेनदेन नहीं है। –

2

आपको पहले बाधाओं को अक्षम करना होगा, अद्यतन करें और फिर बाधाओं को फिर से सक्षम करें।

ओडेटो कोड द्वारा इस article को देखें।

2

आप अपनी बाधा ON UPDATE CASCADE पर बदल सकते हैं।

+0

+1 जो मैंने सोचा था ... जब तक कि डीबी इंजन इसका समर्थन नहीं करता – gbn

2

मैं हमेशा बाधाओं को अक्षम करने के बारे में चिंतित हूं, और आप वास्तव में ऐसा नहीं करना चाहते हैं यदि यह एक आम ऑपरेशन है। माता-पिता तालिका में एक पंक्ति बनाएँ, पंक्ति अद्यतन करने की पर लेकिन नए विदेशी कुंजी मान युक्त आधारित - - सभी बच्चे पंक्तियों जहां विदेशी कुंजी के साथ पुराने मान अद्यतन :

एक बेशक बदसूरत विकल्प है नया मूल्य - अब-अप्रयुक्त पैरेंट कुंजी पंक्ति

यह स्पष्ट कारणों से किसी भी संख्या के लिए अजीब है, और आपके कार्यान्वयन के लिए उपयुक्त नहीं हो सकता है, लेकिन यह डेटाबेस के भीतर संदर्भित अखंडता को बनाए रखता है।

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