एक संग्रहीत कार्यविधि एक में संकलित SQL कथनों का एक समूह है। संग्रहीत कार्यविधियों में व्यावसायिक तर्क और अन्य प्रोग्रामिंग संरचनाएँ शामिल हो सकती हैं।
SQL सर्वर में, एक संग्रहीत कार्यविधि एक या अधिक Transact-SQL कथनों का समूह या Microsoft .NET Framework सामान्य रनटाइम भाषा (CLR) विधि का संदर्भ है।
प्रोग्रामेबिलिटी
एक संग्रहीत कार्यविधि केवल एक लंबी स्क्रिप्ट से कहीं अधिक है। यह एक स्क्रिप्ट है जिसे विशेष रूप से संग्रहीत कार्यविधियों के अंतर्गत SQL सर्वर में सहेजा गया है नोड, और यह कर सकता है:
- इनपुट पैरामीटर स्वीकार करें (और कॉलिंग प्रोग्राम में आउटपुट पैरामीटर के रूप में कई मान लौटाएं)।
- प्रोग्रामिंग स्टेटमेंट होते हैं।
- सफलता या विफलता, और किसी भी विफलता के कारण को इंगित करने के लिए कॉलिंग प्रोग्राम को स्थिति मान लौटाएं।
संग्रहीत प्रक्रियाओं में अक्सर व्यावसायिक तर्क होते हैं। उदाहरण के लिए, एक संग्रहीत कार्यविधि उन पैरामीटरों को स्वीकार कर सकती है जो इसे पास किए गए हैं और IF
. का उपयोग करके उन पैरामीटरों के विरुद्ध परीक्षण कर सकते हैं बयान। उदाहरण के लिए, यदि पैरामीटर एक मान है, तो ऐसा करें, यदि यह दूसरा मान है, तो ऐसा करें।
संग्रहीत कार्यविधियाँ किसी अनुप्रयोग में प्रदर्शन में सुधार कर सकती हैं, क्योंकि संग्रहीत कार्यविधि के बनते ही इसे पार्स और अनुकूलित किया जाता है, और फिर स्मृति में संग्रहीत किया जाता है। संग्रहीत प्रक्रिया के माध्यम से एक सशर्त क्वेरी चलाना बेहद तेज़ हो सकता है - एक ऐसे एप्लिकेशन की तुलना में जो पूरे नेटवर्क में एक क्वेरी भेजता है, SQL सर्वर पर, फिर पूरे नेटवर्क में सभी डेटा वापस कर दिया जाता है ताकि यह इसके माध्यम से फ़िल्टर कर सके, और बाहर निकाल सके केवल वे रिकॉर्ड जिनमें उसकी रुचि है।
संग्रहीत कार्यविधियों के लाभ
यहाँ संग्रहीत कार्यविधियों का उपयोग करने के कुछ मुख्य लाभ दिए गए हैं:
लाभ | स्पष्टीकरण |
---|---|
मॉड्यूलर प्रोग्रामिंग | आप एक संग्रहित प्रक्रिया को एक बार लिख सकते हैं, फिर उसे एप्लिकेशन के विभिन्न हिस्सों से (और यहां तक कि कई एप्लिकेशन से भी) बार-बार कॉल कर सकते हैं। |
प्रदर्शन | संग्रहीत कार्यविधियाँ तेज़ कोड निष्पादन प्रदान करती हैं और नेटवर्क ट्रैफ़िक को कम करती हैं।
|
सुरक्षा | उपयोगकर्ता किसी भी कथन को सीधे निष्पादित किए बिना संग्रहीत कार्यविधि को निष्पादित कर सकते हैं। इसलिए, एक संग्रहीत कार्यविधि उन उपयोगकर्ताओं के लिए उन्नत डेटाबेस कार्यक्षमता प्रदान कर सकती है जिनके पास सामान्य रूप से इन कार्यों तक पहुंच नहीं होगी, लेकिन यह कार्यक्षमता कड़े नियंत्रित तरीके से उपलब्ध कराई गई है। |
एक संग्रहित प्रक्रिया कैसे बनाएं
एक संग्रहीत कार्यविधि बनाने के लिए, CREATE PROCEDURE
. का उपयोग करें कथन, उसके बाद कोड जो संग्रहीत कार्यविधि बनाता है। यदि आपकी संग्रहीत प्रक्रिया पैरामीटर स्वीकार करने जा रही है, तो उन्हें नाम के बाद शामिल करने की आवश्यकता है।
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
उदाहरण
यहां एक संग्रहीत कार्यविधि बनाने और फिर उस संग्रहीत कार्यविधि को निष्पादित करने का एक उदाहरण दिया गया है।
-
संग्रहीत प्रक्रिया बनाएं
इस पूरे ट्यूटोरियल में हमारे द्वारा बनाए गए संगीत डेटाबेस के विरुद्ध निम्नलिखित कथन चलाएँ।
यह उदाहरण एक संग्रहीत कार्यविधि बनाता है जिसे एल्बमफ्रॉमआर्टिस्ट कहा जाता है। यह एक कलाकार से सभी एल्बमों का चयन करता है जो निर्दिष्ट किया जाता है जब संग्रहीत कार्यविधि चलती है।
CREATE PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT AlbumName, ReleaseDate FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE Artists.ArtistName = @ArtistName; GO
-
संग्रहीत प्रक्रिया देखें
प्रोग्रामेबिलिटी> संग्रहित प्रक्रियाओं . का विस्तार करें अपने नए बनाए गए संग्रहीत कार्यविधि को देखने के लिए लागू डेटाबेस के अंतर्गत नोड। आप संग्रहीत कार्यविधि के पैरामीटर . का विस्तार भी कर सकते हैं जब आप इसे चलाते हैं तो आपको पास करने के लिए आवश्यक पैरामीटर देखने के लिए नोड।
-
संग्रहीत प्रक्रिया निष्पादित करें
अब जबकि संग्रहीत कार्यविधि बन गई है, आप इसे
EXECUTE
. का उपयोग करके चला सकते हैं कथन और किसी भी आवश्यक पैरामीटर को पारित करना।हमारे उदाहरण में, हमें कलाकार का नाम पास करना होगा।
EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";
वैकल्पिक रूप से, आप पैरामीटर पास करते समय पैरामीटर नाम को छोड़ सकते हैं। इस तरह:
EXECUTE spAlbumsFromArtist "Devin Townsend";
संग्रहीत प्रक्रिया में बदलाव करें
आप अपनी संग्रहीत कार्यविधि को ALTER PROCEDURE
. के साथ संशोधित कर सकते हैं बयान। जैसे जब आप किसी दृश्य को बदलते हैं, तो आप केवल नई संग्रहीत कार्यविधि परिभाषा को लागू करके संग्रहीत कार्यविधि को बदल सकते हैं।
-
संग्रहीत प्रक्रिया में बदलाव करें
निम्नलिखित कथन चलाएँ। यह संग्रहीत कार्यविधि द्वारा लौटाए गए परिणामों में एक नया स्तंभ जोड़ता है। हम कॉलम नामों में उपनाम भी जोड़ते हैं।
ALTER PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT al.AlbumName, al.ReleaseDate, g.Genre FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON g.GenreId = al.GenreId WHERE ar.ArtistName = @ArtistName; GO
-
संग्रहीत प्रक्रिया निष्पादित करें
अब जबकि हमने
Genre
जोड़ लिया है कॉलम को देखने के लिए, संग्रहीत प्रक्रिया अब उस कॉलम को वापस कर देती है जब हम इसे निष्पादित करते हैं।EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";