2010-09-23 23 views
40

मैं विदेशी कुंजी के साथ एक मेज काट-छांट करने की कोशिश की है और संदेश मिला: क्योंकि यह एक विदेशी कुंजी द्वारा संदर्भित की जा रही हैमैं त्रुटि "हटाएँ बयान संदर्भ बाधा के साथ विरोध हुआ"

"तालिका काट-छांट नहीं कर सकते हैं बाधा "।

मैं इस समस्या के बारे में साहित्य का एक बहुत पढ़ सकते हैं और सोचा कि मैं का उपयोग करके समाधान

DELETE FROM table_name DBCC CHECKIDENT (table_name, RESEED, 0) 

हटाना पाया लेकिन मैं अभी भी एक त्रुटि संदेश मिला:

"हटाएँ बयान संदर्भ संदर्भ बाधा के साथ संघर्ष किया "।

जब मैं पिछली क्वेरी

DELETE FROM table_name DBCC CHECKIDENT (table_name, RESEED, 0) 

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

उत्तर

6

आप एक पंक्ति को हटाने की कोशिश कर रहे हैं जिसे किसी अन्य पंक्ति (संभवतः किसी अन्य तालिका में) द्वारा संदर्भित किया जाता है।

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

+0

मैं "बच्चे" तालिका से हटाने की हर पंक्ति के साथ और यह "जनक" तालिका वाली सभी पंक्तियां हटाने के बाद मेरी समस्या हल हो गई। लेकिन फिर भी जैसे "कुछ सवाल :) है ** जब मैं (TABLE_NAME बी सी सी CHECKIDENT से हटाएँ (TABLE_NAME, Reseed, 0) जैसे) यह एक त्रुटि यह काम नहीं दिया माइक्रोसॉफ्ट प्रबंधन स्टूडियो के साथ हटा सकते हैं और पहले की क्वेरी निष्पादित करने के लिए कोशिश कर रहा हूँ ठीक है। ** " – Peter

40

त्रुटि का अर्थ है कि आपके पास अन्य तालिकाओं में डेटा है जो उस डेटा को संदर्भित करता है जिसे आप हटाने का प्रयास कर रहे हैं।

आपको या तो बाधाओं को छोड़ना और फिर से बनाना होगा या विदेशी कुंजी संदर्भों को हटा देना होगा।

मान लीजिए आप निम्न तालिकाओं है

dbo.Students 
(
StudentId 
StudentName 
StudentTypeId 
) 


dbo.StudentTypes 
(
StudentTypeId 
StudentType 
) 

मान लीजिए कि एक विदेशी कुंजी बाधा StudentTypes में StudentTypeId स्तंभ और Students

में StudentTypeId स्तंभ के बीच मौजूद है आप StudentTypes एक में सभी डेटा को हटाने का प्रयास करते हैं त्रुटि StudentTypeId कॉलम StudentsStudentTypes तालिका में डेटा का संदर्भ देने के रूप में होगी।

संपादित करें:

DELETE और TRUNCATE अनिवार्य रूप से एक ही बात करते हैं। केवल अंतर यह है कि TRUNCATE लॉग फ़ाइल में परिवर्तनों को सहेजता नहीं है। इसके अलावा आप TRUNCATE

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

+0

धन्यवाद, मैं पहले" बच्चे "तालिका को हटाने और मास्टर के बाद इसे हटाने की कोशिश करूंगा। अगर मैं DELETE के बजाय TRUNCATE का उपयोग करता हूं तो यह काम करने जा रहा है। आप मुझे बता सकते क्यों एमएस प्रबंधन स्टूडियो में मैं एक ही क्वेरी जो मुझे त्रुटि दे रहा है के साथ तालिका से पंक्तियाँ हटा सकते हैं जब मैं आवेदन के साथ प्रयास करें – Peter

+0

@Peter - मैं अपने जवाब – codingbadger

+4

अद्यतन किया है यह "फर्क सिर्फ इतना है" से दूर है उदाहरण के लिए यदि कोई संदर्भ हैं तो छंटनी नहीं हो सकती है। और अधिकांश सिस्टम पर लेनदेन में छंटनी नहीं हो सकती है। और एक संग्रहित प्रक्रिया के हिस्से के रूप में छंटनी नहीं हो सकती है। और अधिकांश सिस्टम में एक अलग बैच में छिड़काव होना चाहिए। और छंटनी ट्रिगर आग नहीं कर सकते हैं। –

1

, DELETE संदर्भ बदले बिना, आप पहली बार हटा सकते हैं या अन्यथा बदल अन्य तालिकाओं में सभी प्रासंगिक पंक्तियों (अपने उद्देश्यों के लिए उपयुक्त तरीके से) चाहिए करने के लिए।

काटना आप संदर्भों को निकालना होगा। TRUNCATE एक DDL कथन (बनाने के लिए तुलनीय और ड्रॉप) नहीं कोई DML कथन (सम्मिलित करें की तरह और हटाएं) है और, ट्रिगर का कारण नहीं है कि क्या स्पष्ट या संदर्भ और अन्य सीमाओं से जुड़े लोगों, निकाल दिया जाए। इस वजह से, संदर्भों के साथ तालिकाओं पर TRUNCATE की अनुमति होने पर डेटाबेस को असंगत स्थिति में रखा जा सकता है। यह एक नियम था जब TRUNCATE कुछ प्रणालियों द्वारा उपयोग किए जाने वाले मानक का विस्तार था, और मानक द्वारा अनिवार्य है, अब यह जोड़ा गया है।

9

आप ON DELETE CASCADE लागू करने के जहां प्रासंगिक माना है?

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