SQL सर्वर में, आप sp_tables
. का उपयोग कर सकते हैं वर्तमान परिवेश में तालिकाओं और दृश्यों की सूची प्राप्त करने के लिए सिस्टम संग्रहीत कार्यविधि।
आप सभी तालिकाओं और दृश्यों को वापस कर सकते हैं, या आप इसे किसी विशेष स्वामी, प्रकार, पैटर्न, या यहां तक कि किसी विशिष्ट तालिका या दृश्य तक सीमित कर सकते हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
सभी तर्क वैकल्पिक हैं।
उदाहरण 1 - कोई तर्क नहीं
आप इस संग्रहीत कार्यविधि को बिना किसी तर्क के निष्पादित कर सकते हैं। ऐसा करने से वर्तमान परिवेश में सभी टेबल और दृश्य वापस आ जाएंगे।
इस तरह:
EXEC sp_tables;
यह मेरे सिस्टम पर 500 से अधिक पंक्तियों को लौटाता है, इसलिए मैं यहां परिणाम प्रदान नहीं करूंगा। उपयोगकर्ता-परिभाषित तालिकाओं और विचारों को वापस करने के साथ-साथ यह सिस्टम ऑब्जेक्ट भी लौटाता है, जैसे कि sys
और INFORMATION_SCHEMA
टेबल और दृश्य।
उदाहरण 2 - सभी तर्क
दूसरी ओर, यहां एक उदाहरण दिया गया है जिसमें सभी तर्क शामिल हैं। यह परिणामों को एक विशिष्ट तालिका नाम, एक विशिष्ट प्रकार, एक विशिष्ट योग्यता, और एक विशिष्ट स्वामी तक सीमित कर देता है।
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
परिणाम:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
उदाहरण 3 - एक विशिष्ट तालिका लौटाएं
किसी विशिष्ट तालिका को वापस करने का एक आसान तरीका केवल पहले तर्क का उपयोग करना है।
इस तरह:
EXEC sp_tables @table_name = 'Customers';
या और भी संक्षेप में, इनमें से किसी एक की तरह:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
हालाँकि, ध्यान रखें कि आपको एक से अधिक पंक्तियाँ मिल सकती हैं। इस उदाहरण में, दो पंक्तियाँ दी गई हैं:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
पहली पंक्ति एक टेबल के लिए है और दूसरी पंक्ति एक दृश्य के लिए है।
यदि मुझे कोई दृश्य या सिस्टम तालिका देखने में कोई दिलचस्पी नहीं थी, तो मैं तालिका प्रकार निर्दिष्ट करने के लिए एक और तर्क जोड़ सकता था।
उदाहरण 4 - एक विशिष्ट तालिका प्रकार लौटाएं
यहां, मैं तालिका के नाम के साथ केवल उस तालिका प्रकार को निर्दिष्ट करके पिछले उदाहरण को परिशोधित करता हूं, जिसमें मेरी रुचि है।
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
परिणाम:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
स्वीकार्य प्रकारों में शामिल हैं VIEW
, TABLE
, और SYSTEMTABLE
.
ध्यान दें कि तालिका प्रकार अपरकेस होना चाहिए।
उदाहरण 5 - एकाधिक तालिका प्रकार लौटाएं
आपने देखा होगा कि तालिका प्रकार के लिए सिंटैक्स एकल उद्धरणों का उपयोग करता है और डबल उद्धरण। ऐसा इसलिए है क्योंकि यह तालिका प्रकारों की अल्पविराम से अलग की गई सूची को स्वीकार करता है। पूरी सूची दोहरे उद्धरण चिह्नों में संलग्न है, और प्रत्येक सूची आइटम एकल उद्धरणों में संलग्न है, जिसमें प्रत्येक आइटम को एक अल्पविराम से अलग किया गया है।
यहाँ तालिका प्रकारों को लौटाने का एक उदाहरण दिया गया है TABLE
और VIEW
।
EXEC sp_tables @table_type = "'TABLE','VIEW'";
ध्यान दें कि यदि SET QUOTED_IDENTIFIER
ON
है , प्रत्येक एकल उद्धरण चिह्न को दोगुना किया जाना चाहिए और पूरे पैरामीटर को एकल उद्धरण चिह्नों में संलग्न किया जाना चाहिए।
उदाहरण 6 - तालिका योग्यता तर्क के बारे में एक नोट
अगर आप @table_qualifier
. का इस्तेमाल करते हैं तर्क, इसका मान वर्तमान परिवेश के समान होना चाहिए, अन्यथा आपको एक त्रुटि मिलेगी। SQL सर्वर में, टेबल क्वालिफायर डेटाबेस नाम का प्रतिनिधित्व करता है। कुछ उत्पादों में, यह तालिका के डेटाबेस वातावरण के सर्वर नाम का प्रतिनिधित्व करता है।
यदि मैं वर्तमान डेटाबेस से भिन्न मान का उपयोग करता हूं तो SQL सर्वर में क्या होता है:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
परिणाम:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86 The database name component of the object qualifier must be the name of the current database.
उदाहरण 7 - वाइल्डकार्ड
आप @fUsePattern
. का उपयोग कर सकते हैं यह निर्दिष्ट करने के लिए तर्क कि क्या अंडरस्कोर ( _
), प्रतिशत ( %
), और ब्रैकेट ( [
या ]
) वर्णों की व्याख्या वाइल्डकार्ड वर्णों के रूप में की जाती है। मान्य मान हैं 0
(पैटर्न मिलान बंद है) और 1
(पैटर्न मिलान चालू है)। डिफ़ॉल्ट मान 1
है ।
"ए" अक्षर से शुरू होने वाले टेबल नामों को वापस करने के लिए पैटर्न मिलान का उपयोग करने का एक उदाहरण यहां दिया गया है:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
परिणाम:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
लेकिन अगर मैं पैटर्न मिलान को अक्षम कर दूं तो क्या होगा:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
परिणाम:
(0 rows affected)