SQL सर्वर में, संग्रहीत कार्यविधियों को समूहीकृत करने का उद्देश्य क्या है?


35

सबसे खराब मुद्दों में से एक जिसके साथ मुझे निपटना पड़ा है, उसे संग्रहीत प्रक्रिया समूहों के साथ करना है। एक संग्रहीत प्रक्रिया को देखते हुए usp_DoSomethingAwesome, मैं उस कॉल को दूसरे समूह में कॉल करके बना सकता हूं usp_DoSomethingAwesome;2

मैंने कुछ प्रतिकृति मुद्दों (प्रकाशक: SQL 2000 Ent, Dist / Sub: 2008 R2 Ent।) की समस्या का निवारण करते समय इसकी खोज की थी जो सिस्टम-जनरेट किए गए कुछ सम्मिलित, अद्यतन और प्रतिकृति संग्रहित प्रक्रियाओं को हटाने के साथ उत्पन्न हुए थे।

इस "समूहीकरण" की क्षमता के पीछे उद्देश्य / विचार क्या है?

जवाबों:


32

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

उन्हें क्रमांकित प्रक्रिया कहा जाता है और वे बिल्कुल पदावनत ( 2005 से घोषित ) हैं। वे अभी भी SQL Server 2012 में समर्थित हैं, लेकिन कुछ विशेषताएं उनके साथ अच्छी तरह से नहीं खेलती हैं। उदाहरण के लिए, उन्हें माना गया डेटाबेस में एक नियंत्रण उल्लंघन माना जाता है, और क्रमांकित> 1 कोई भी प्रक्रिया नहीं बनाई जाएगी:

Msg 12829, स्तर 16, राज्य 1, प्रक्रिया ब्लैट, पंक्ति 1
संग्रहीत कार्यविधि 'dbo.blat' गिने संग्रहीत कार्यविधियों के समूह को संदर्भित करता है। निहित डेटाबेस में क्रमांकित संग्रहीत कार्यविधियाँ उपलब्ध नहीं हैं। निहित डेटाबेस के बारे में अधिक जानकारी के लिए कृपया पुस्तकों को ऑनलाइन विषय समझें डेटाबेस से युक्त।


5

संग्रहित प्रक्रियाओं में समूह की क्षमता (पदावनत) एक एकल (और बल्कि मूर्खतापूर्ण) उद्देश्य के लिए मौजूद है: एक एकल DROPविवरण के माध्यम से बड़े पैमाने पर हटाने की क्षमता । SQL सर्वर 2000 MSDN प्रलेखन के अनुसार एक संग्रहीत प्रक्रिया बनाने के लिए :

समूहीकरण
एक प्रक्रिया एक मौजूदा संचित प्रक्रिया के रूप में एक ही नाम के साथ बनाई जा सकती है यदि इसे एक अलग पहचान संख्या दी जाती है, जो प्रक्रियाओं को तार्किक रूप से समूहीकृत करने की अनुमति देती है। एक ही नाम के साथ समूहन प्रक्रियाएं उन्हें एक ही समय में हटाने की अनुमति देती हैं। एक ही आवेदन में उपयोग की जाने वाली प्रक्रियाएं अक्सर इस तरह से समूहीकृत की जाती हैं। उदाहरण के लिए, my_app एप्लिकेशन के साथ उपयोग की जाने वाली प्रक्रियाओं को my_proc; 1; my_proc; 2; आदि नाम दिया जा सकता है । My_proc को हटाने से पूरा समूह नष्ट हो जाता है। प्रक्रियाओं को समूहीकृत करने के बाद, समूह के भीतर की अलग-अलग प्रक्रियाओं को हटाया नहीं जा सकता है।

दिए गए इस निर्माण का उपयोग करने के लिए कोई अतिरिक्त लाभ नहीं हैं कि एक ही आधार नाम का उपयोग करने से भी ओवरलोडिंग की अनुमति नहीं मिलती है (हस्ताक्षर को विशिष्ट होने की आवश्यकता नहीं है, और किसी विशेष "नंबर" के लिए कोई स्वचालित निष्पादन मार्ग नहीं है) और इसलिए आपको अभी भी ज़रूरत है निष्पादित करते समय "संख्या" का उपयोग करें। इसलिए "मूर्खतापूर्ण" का निर्धारण (और शायद इसके बारे में बहुत अच्छा तरीका है ;-)

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