यह आलेख SQL सर्वर में एक दृश्य की परिभाषा प्राप्त करने के लिए T-SQL का उपयोग करने के 4 तरीके प्रस्तुत करता है।
दृश्य परिभाषा वास्तविक T-SQL कथन है जिसका उपयोग दृश्य बनाने के लिए किया जाता है।
उदाहरण 1 - sys.sql_modules सिस्टम कैटलॉग व्यू
sys.sql_modules
सिस्टम कैटलॉग व्यू प्रत्येक ऑब्जेक्ट के लिए एक पंक्ति देता है जो SQL सर्वर में एक SQL भाषा-परिभाषित मॉड्यूल है।
दूसरे शब्दों में, आप इस दृश्य का उपयोग विभिन्न प्रकार की वस्तुओं के बारे में जानकारी वापस करने के लिए कर सकते हैं, जिसमें फ़ंक्शंस, संग्रहीत कार्यविधियाँ और निश्चित रूप से, विचार शामिल हैं।
इस दृश्य के साथ लौटाए गए स्तंभों में से एक को परिभाषा
कहा जाता है . जैसा कि नाम से ही स्पष्ट है, यह वस्तु की परिभाषा देता है।
SELECT definition FROM sys.sql_modules WHERE object_id = object_id('Website.Customers');
परिणाम:
+--------------+ | definition | |--------------| | CREATE VIEW Website.Customers AS SELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, bg.BuyingGroupName, s.WebsiteURL, dm.DeliveryMethodName AS DeliveryMethod, c.CityName AS CityName, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPosition FROM Sales.Customers AS s LEFT OUTER JOIN Sales.CustomerCategories AS sc ON s.CustomerCategoryID = sc.CustomerCategoryID LEFT OUTER JOIN [Application].People AS pp ON s.PrimaryContactPersonID = pp.PersonID LEFT OUTER JOIN [Application].People AS ap ON s.AlternateContactPersonID = ap.PersonID LEFT OUTER JOIN Sales.BuyingGroups AS bg ON s.BuyingGroupID = bg.BuyingGroupID LEFT OUTER JOIN [Application].DeliveryMethods AS dm ON s.DeliveryMethodID = dm.DeliveryMethodID LEFT OUTER JOIN [Application].Cities AS c ON s.DeliveryCityID = c.CityID | +--------------+ (1 row affected)
मैंने इस उदाहरण के साथ एक कमांड लाइन इंटरफ़ेस (CLI) का उपयोग किया है, इसलिए परिणाम अच्छी तरह से स्वरूपित है।
यदि आप ग्रिड में परिणामों को वापस करने के लिए GUI (जैसे SSMS या Azure डेटा स्टूडियो) का उपयोग करते हैं, तो परिभाषा को एक सेल में एक लंबी लाइन में लौटाए जाने की संभावना है। ऐसे मामलों में यदि आप इसे अधिक पठनीय प्रारूप में प्रदर्शित करना चाहते हैं तो आपको कुछ अतिरिक्त कार्य करने की आवश्यकता होगी। वैकल्पिक रूप से, आप sp_helptext
. का उपयोग कर सकते हैं नीचे दी गई विधि।
उदाहरण 2 - sp_helptext सिस्टम संग्रहित प्रक्रिया
किसी दृश्य की परिभाषा को वापस करने का एक अन्य तरीका sp_helptext
. का उपयोग करना है सिस्टम संग्रहीत प्रक्रिया। एक दृश्य के लिए परिभाषा को वापस करने के साथ-साथ, यह उपयोगकर्ता द्वारा परिभाषित नियम, डिफ़ॉल्ट, अनएन्क्रिप्टेड T-SQL संग्रहीत कार्यविधि, उपयोगकर्ता-परिभाषित Transact-SQL फ़ंक्शन, ट्रिगर, कंप्यूटेड कॉलम, CHECK<की परिभाषा भी लौटा सकता है। /कोड> बाधा, या सिस्टम ऑब्जेक्ट जैसे सिस्टम संग्रहीत कार्यविधि।
जैसा कि पिछले उदाहरण में बताया गया है, यह संग्रहीत कार्यविधि कई पंक्तियों में दृश्य की परिभाषा प्रदर्शित करती है। प्रत्येक पंक्ति में T-SQL परिभाषा के 255 वर्ण होते हैं।
उदाहरण:
EXEC sp_helptext 'Website.Customers';
GUI (Azure Data Studio) का उपयोग करते समय मुझे जो परिणाम मिलता है, वह यह है:
और यहाँ मुझे अपने कमांड लाइन इंटरफ़ेस का उपयोग करके क्या मिलता है:
+--------+ | Text | |--------| | | | CREATE VIEW Website.Customers | | AS | | SELECT s.CustomerID, | | s.CustomerName, | | sc.CustomerCategoryName, | | pp.FullName AS PrimaryContact, | | ap.FullName AS AlternateContact, | | s.PhoneNumber, | | s.FaxNumber, | | bg.BuyingGroupName, | | s.WebsiteURL, | | dm.DeliveryMethodName AS DeliveryMethod, | | c.CityName AS CityName, | | s.DeliveryLocation AS DeliveryLocation, | | s.DeliveryRun, | | s.RunPosition | | FROM Sales.Customers AS s | | LEFT OUTER JOIN Sales.CustomerCategories AS sc | | ON s.CustomerCategoryID = sc.CustomerCategoryID | | LEFT OUTER JOIN [Application].People AS pp | | ON s.PrimaryContactPersonID = pp.PersonID | | LEFT OUTER JOIN [Application].People AS ap | | ON s.AlternateContactPersonID = ap.PersonID | | LEFT OUTER JOIN Sales.BuyingGroups AS bg | | ON s.BuyingGroupID = bg.BuyingGroupID | | LEFT OUTER JOIN [Application].DeliveryMethods AS dm | | ON s.DeliveryMethodID = dm.DeliveryMethodID | | LEFT OUTER JOIN [Application].Cities AS c | | ON s.DeliveryCityID = c.CityID | +--------+
इस बार GUI का उपयोग करने पर परिणाम बेहतर दिखाई देते हैं।
उदाहरण 3 - OBJECT_DEFINITION() फ़ंक्शन
किसी दृश्य की परिभाषा वापस करने का दूसरा तरीका OBJECT_DEFINITION()
का उपयोग करना है समारोह। पिछली विधियों की तरह, यह विधि अन्य ऑब्जेक्ट प्रकारों की परिभाषा भी लौटा सकती है।
यहां इस फ़ंक्शन का उपयोग करने का एक उदाहरण दिया गया है:
SELECT OBJECT_DEFINITION( OBJECT_ID('Website.Customers') ) AS [Definition];
परिणाम:
+--------------+ | Definition | |--------------| | CREATE VIEW Website.Customers AS SELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, bg.BuyingGroupName, s.WebsiteURL, dm.DeliveryMethodName AS DeliveryMethod, c.CityName AS CityName, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPosition FROM Sales.Customers AS s LEFT OUTER JOIN Sales.CustomerCategories AS sc ON s.CustomerCategoryID = sc.CustomerCategoryID LEFT OUTER JOIN [Application].People AS pp ON s.PrimaryContactPersonID = pp.PersonID LEFT OUTER JOIN [Application].People AS ap ON s.AlternateContactPersonID = ap.PersonID LEFT OUTER JOIN Sales.BuyingGroups AS bg ON s.BuyingGroupID = bg.BuyingGroupID LEFT OUTER JOIN [Application].DeliveryMethods AS dm ON s.DeliveryMethodID = dm.DeliveryMethodID LEFT OUTER JOIN [Application].Cities AS c ON s.DeliveryCityID = c.CityID | +--------------+के रूप में शहर
इस बार मेरे GUI ग्रिड की तुलना में मेरे CLI में पढ़ना आसान है।
उदाहरण 4 - दृश्य सिस्टम सूचना स्कीमा दृश्य
दृश्य
सिस्टम सूचना स्कीमा दृश्य किसी दृश्य की परिभाषा भी लौटा सकता है। इस विधि और पिछली विधियों के बीच एक अंतर यह है कि, VIEWS
सूचना स्कीमा दृश्य केवल विचारों तक सीमित है (जैसा कि नाम से ही स्पष्ट है)।
यह स्तंभों का एक समूह देता है, जिनमें से एक दृश्य की परिभाषा है। इसलिए हम उस कॉलम को केवल परिभाषा वापस करने के लिए नाम दे सकते हैं:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'Customers';
परिणाम:
+-------------------+ | VIEW_DEFINITION | |-------------------| | CREATE VIEW Website.Customers AS SELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, bg.BuyingGroupName, s.WebsiteURL, dm.DeliveryMethodName AS DeliveryMethod, c.CityName AS CityName, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPosition FROM Sales.Customers AS s LEFT OUTER JOIN Sales.CustomerCategories AS sc ON s.CustomerCategoryID = sc.CustomerCategoryID LEFT OUTER JOIN [Application].People AS pp ON s.PrimaryContactPersonID = pp.PersonID LEFT OUTER JOIN [Application].People AS ap ON s.AlternateContactPersonID = ap.PersonID LEFT OUTER JOIN Sales.BuyingGroups AS bg ON s.BuyingGroupID = bg.BuyingGroupID LEFT OUTER JOIN [Application].DeliveryMethods AS dm ON s.DeliveryMethodID = dm.DeliveryMethodID LEFT OUTER JOIN [Application].Cities AS c ON s.DeliveryCityID = c.CityID | +-------------------+
ध्यान दें कि VIEW_DEFINITION
इस सिस्टम व्यू में कॉलम की अधिकतम लंबाई nvarchar(4000) . है . इससे बड़ी परिभाषाओं को देखने के लिए, आप OBJECT_DEFINITION()
. का उपयोग कर सकते हैं पिछले उदाहरण में कार्य करें।
OBJECT_DEFINITION()
. का रिटर्न वैल्यू फ़ंक्शन है nvarchar(max) , इसलिए इसमें VIEW_DEFINITION
. की वर्ण सीमा नहीं है कॉलम (जैसा कि बताया गया है, nvarchar(4000) . है )।