यह आलेख SQL सर्वर में संग्रहीत कार्यविधि की परिभाषा प्राप्त करने के लिए T-SQL का उपयोग करने के 4 तरीके प्रस्तुत करता है।
परिभाषा वास्तविक T-SQL कथन है जिसका उपयोग संग्रहीत कार्यविधि को बनाने के लिए किया जाता है।
यहां तीन विधियां बिल्कुल वैसी ही हैं जैसी किसी दृश्य की परिभाषा को वापस करने के लिए उपयोग की जाती हैं (यहां को छोड़कर, उनका उपयोग विचारों के बजाय संग्रहीत प्रक्रियाओं पर किया जा रहा है)।
उदाहरण 1 - sys.sql_modules सिस्टम कैटलॉग व्यू
sys.sql_modules
सिस्टम कैटलॉग व्यू प्रत्येक ऑब्जेक्ट के लिए एक पंक्ति देता है जो SQL सर्वर में एक SQL भाषा-परिभाषित मॉड्यूल है।
दूसरे शब्दों में, आप इस दृश्य का उपयोग विभिन्न प्रकार की वस्तुओं के बारे में जानकारी वापस करने के लिए कर सकते हैं, जिसमें फ़ंक्शंस, विचार और निश्चित रूप से संग्रहीत कार्यविधियाँ शामिल हैं।
इस दृश्य के साथ लौटाए गए स्तंभों में से एक को definition
कहा जाता है . जैसा कि नाम से ही स्पष्ट है, यह वस्तु की परिभाषा देता है।
sys.sql_modules से परिभाषा चुनें, जहां object_id =object_id ('uspGetAlbumsByArtist');
परिणाम:
+--------------+| परिभाषा ||--------------|| प्रक्रिया बनाएं [डीबीओ]। [uspGetAlbumsByArtist] @ArtistId int ASSELECT AlbumNameFROM [dbo]।मैंने इस उदाहरण के साथ एक कमांड लाइन इंटरफ़ेस (CLI) का उपयोग किया है, इसलिए परिणाम अच्छी तरह से स्वरूपित है।
यदि आप ग्रिड में परिणामों को वापस करने के लिए GUI (जैसे SSMS या Azure डेटा स्टूडियो) का उपयोग करते हैं, तो परिभाषा को एक सेल में एक लंबी लाइन में लौटाए जाने की संभावना है। ऐसे मामलों में यदि आप इसे अधिक पठनीय प्रारूप में प्रदर्शित करना चाहते हैं तो आपको कुछ अतिरिक्त कार्य करने की आवश्यकता होगी। वैकल्पिक रूप से, आप
sp_helptext
. का उपयोग कर सकते हैं नीचे दी गई विधि।उदाहरण 2 - sp_helptext सिस्टम संग्रहित प्रक्रिया
संग्रहीत कार्यविधि की परिभाषा को वापस करने का एक अन्य तरीका
sp_helptext
. का उपयोग करना है सिस्टम संग्रहीत प्रक्रिया। साथ ही (अनएन्क्रिप्टेड) संग्रहीत प्रक्रियाओं के लिए परिभाषा वापस करने में सक्षम होने के कारण, यह उपयोगकर्ता द्वारा परिभाषित नियम, डिफ़ॉल्ट, दृश्य, उपयोगकर्ता द्वारा परिभाषित ट्रांजैक्ट-एसक्यूएल फ़ंक्शन, ट्रिगर, कंप्यूटेड कॉलम,CHECK
बाधा, या सिस्टम ऑब्जेक्ट जैसे सिस्टम संग्रहीत कार्यविधि।यह संग्रहीत कार्यविधि कई पंक्तियों में परिभाषा प्रदर्शित करती है। प्रत्येक पंक्ति में T-SQL परिभाषा के 255 वर्ण होते हैं।
उदाहरण:
EXEC sp_helptext 'uspGetAlbumsByArtist';GUI (Azure Data Studio) का उपयोग करते समय मुझे जो परिणाम मिलता है, वह यह है:
और यहाँ मुझे अपने कमांड लाइन इंटरफ़ेस का उपयोग करके क्या मिलता है:
+--------+| टेक्स्ट ||-----------|| प्रक्रिया बनाएं [डीबीओ]। [uspGetAlbumsByArtist] @ArtistId int AS || एल्बम का नाम चुनें || [डीबीओ] से।[एल्बम] || जहां कलाकार आईडी =@ArtistId |+--------+उदाहरण 3 - OBJECT_DEFINITION() फ़ंक्शन
संग्रहीत कार्यविधि की परिभाषा वापस करने का दूसरा तरीका
OBJECT_DEFINITION()
का उपयोग करना है समारोह। पिछली विधियों की तरह, यह विधि अन्य ऑब्जेक्ट प्रकारों की परिभाषा भी लौटा सकती है।यहां इस फ़ंक्शन का उपयोग करने का एक उदाहरण दिया गया है:
चुनें OBJECT_DEFINITION(OBJECT_ID('uspGetAlbumsByArtist')) AS [परिभाषा];परिणाम:
+--------------+| परिभाषा ||--------------|| प्रक्रिया बनाएं [डीबीओ]। [uspGetAlbumsByArtist] @ArtistId int ASSELECT AlbumNameFROM [dbo]।उदाहरण 4 - रूटीन सिस्टम सूचना स्कीमा दृश्य
ROUTINES
सिस्टम सूचना स्कीमा दृश्य संग्रहीत कार्यविधियों (और फ़ंक्शन भी) की परिभाषा लौटा सकता है।यह दृश्य कई कॉलम लौटाता है, जिनमें से एक ऑब्जेक्ट की परिभाषा है। इसलिए हम उस कॉलम को केवल परिभाषा वापस करने के लिए नाम दे सकते हैं:
INFORMATION_SCHEMA से ROUTINE_DEFINITION को चुनें।ROUTINESWHERE ROUTINE_NAME ='uspGetAlbumsByArtist';परिणाम:
+--------------------------+| रूटीन_डेफिनिशन ||----------------------|| प्रक्रिया बनाएं [डीबीओ]। [uspGetAlbumsByArtist] @ArtistId int ASSELECT AlbumNameFROM [डीबीओ]। +ध्यान दें कि
ROUTINE_DEFINITION
इस सिस्टम व्यू में कॉलम की अधिकतम लंबाई nvarchar(4000) . है . इससे बड़ी परिभाषाओं के लिए, आपOBJECT_DEFINITION()
. का उपयोग कर सकते हैं फ़ंक्शन याsys.sql_modules
पिछले उदाहरणों में देखें। वे दोनों nvarchar(max) . का उपयोग करते हैं परिभाषा के लिए, इसलिए उनके पासROUTINE_DEFINITION
की वर्ण सीमा नहीं है कॉलम (जैसा कि बताया गया है, nvarchar(4000) . है )।