2008-08-11 15 views
5

में तालिकाओं के समूह को छोड़ना SQL सर्वर में अंतरसंबंधित तालिकाओं के समूह को छोड़ने का कोई आसान तरीका है? आदर्श रूप में मैं इस बारे में चिंता करने से बचना चाहता हूं कि उन्हें किस क्रम में गिराया जा रहा है क्योंकि मुझे पता है कि पूरा समूह प्रक्रिया के अंत तक चलेगा।SQL सर्वर

उत्तर

2

बेवकूफ लगने के जोखिम पर, मुझे विश्वास नहीं है कि SQL सर्वर डिलीट/कैस्केड सिंटैक्स का समर्थन करता है। मुझे लगता है कि आप कैस्केडिंग डिलीट्स (http://msdn.microsoft.com/en-us/library/ms152507.aspx) करने के लिए एक डिलीट नियम कॉन्फ़िगर कर सकते हैं, लेकिन जहां तक ​​मुझे पता है कि SQL सर्वर के साथ चाल है, तो आप प्रत्येक ड्रॉप तालिका के लिए अपनी ड्रॉप क्वेरी को चलाने के लिए केवल एक बार काम करना चाहते हैं, फिर इसे जांचें।

0

मैं इस परीक्षण करने के लिए SQL सर्वर के लिए पहुँच नहीं है, लेकिन कैसे के बारे में:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE; 
0

मैं नहीं यकीन है कि, अगर डेरेक दृष्टिकोण से काम करता है हूँ। आपने अभी तक इसे सबसे अच्छे उत्तर के रूप में चिह्नित नहीं किया है।

यदि नहीं: SQL सर्वर 2005 के साथ यह संभव होना चाहिए, मुझे लगता है।
वहां उन्होंने अपवाद प्रस्तुत किए (जो मैंने अभी तक उपयोग नहीं किया है)। तो तालिका को छोड़ दें, अपवाद पकड़ें, अगर कोई होता है और अगली टेबल को तब तक चलाएं जब तक कि वे सब खत्म नहीं हो जाते।
आप टेम्पलेट-टेबल में टेबल की सूची स्टोर कर सकते हैं और यदि आप चाहें तो इसे पार करने के लिए कर्सर का उपयोग कर सकते हैं।

0

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

@ डेरेक पार्क, मुझे नहीं पता था कि आप वहां अलग-अलग टेबल को अल्पविराम कर सकते हैं, इसलिए यह आसान है, लेकिन ऐसा लगता है कि यह अपेक्षाकृत काम नहीं करता है। नीदर IF EXISTS और न ही CASCADE एसक्यूएल सर्वर द्वारा पहचाने जाते हैं, और drop table X, Y, Z चल रहा है केवल तभी काम करता है जब उन्हें निर्दिष्ट क्रम में गिरा दिया जाना चाहिए।

http://msdn.microsoft.com/en-us/library/ms173790.aspx भी देखें, जो ड्रॉप तालिका वाक्यविन्यास का वर्णन करता है।

0

किसी भी क्रम में टेबल को छोड़ने से आपको वापस रखने वाली चीज़ टेबल के बीच विदेशी कुंजी निर्भरता है। तो शुरू करने से पहले एफके से छुटकारा पाएं।

  1. INFORMATION_SCHEMA प्रणाली दृश्यों का उपयोग करना, सभी विदेशी इन तालिकाओं में से किसी से संबंधित कुंजियों की सूची प्राप्त
  2. ड्रॉप इन विदेशी कुंजी
  3. अब आप का उपयोग कर, टेबल के सभी ड्रॉप करने में सक्षम होना चाहिए के प्रत्येक कोई भी आदेश जो आप चाहते हैं।
1

एक अलग दृष्टिकोण हो सकता है: पहले बाधाओं से छुटकारा पाएं, फिर टेबल को एक शॉट में छोड़ दें।

दूसरे शब्दों में, प्रत्येक बाधा के लिए एक ड्रॉप कन्स्ट्रेंट, फिर प्रत्येक तालिका के लिए एक ड्रॉप तालिका; इस बिंदु पर निष्पादन का आदेश एक मुद्दा नहीं होना चाहिए।

1

यह sp___drop___constraints स्क्रिप्ट आप Database Journal पर पा सकते हैं की आवश्यकता है:

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?" 
GO 
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?" 
GO 

नोट इस - जाहिर है - अगर आप अपने डेटाबेस में तालिकाओं के सभी ड्रॉप करने, इसलिए सावधान रहना मतलब