समय-समय पर मैं खुद को SHOW TABLES
. टाइप करते हुए पाता हूं SQL सर्वर में, तालिकाओं की सूची प्राप्त करने की अपेक्षा करता है।
अगर मैं MySQL या MariaDB का उपयोग कर रहा था तो यह सही समझ में आएगा। लेकिन एसक्यूएल सर्वर/टी-एसक्यूएल में SHOW TABLES
नहीं है MySQL या MariaDB जैसे कथन, इसलिए यह कभी काम नहीं करता है। और मैं भूलता रहता हूं। लेकिन सौभाग्य से, SQL सर्वर के पास विकल्प हैं।
SQL सर्वर में तालिकाओं की सूची प्राप्त करने के लिए यहां पांच विकल्प दिए गए हैं। जब भी आप उस मायावी SHOW TABLES
को खोजने का प्रयास कर रहे हों, तब इनका उपयोग किया जा सकता है SQL सर्वर में स्टेटमेंट।
विकल्प 1 - sys.tables
sys.tables
सिस्टम कैटलॉग दृश्य विशेष रूप से उपयोगकर्ता तालिका जानकारी वापस करने के लिए डिज़ाइन किया गया है:
SELECT name
FROM sys.tables;
यह वर्तमान डेटाबेस में सभी उपयोगकर्ता तालिकाओं का नाम देता है। आप स्टेटमेंट को USE <database name>
. के साथ जोड़कर सही डेटाबेस पर स्विच कर सकते हैं जहां <database name>
उस डेटाबेस का नाम है जिसके लिए आप सूचीबद्ध होना चाहते हैं।
उदाहरण के लिए, निम्न कथन KrankyKranes
. से सभी उपयोगकर्ता तालिकाओं को लौटाता है डेटाबेस:
USE KrankyKranes;
SELECT name
FROM sys.tables;
आप चाहें तो स्कीमा भी वापस कर सकते हैं:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
यहां, मैंने SCHEMA_NAME()
. का उपयोग किया है schema_id
. के मान का अनुवाद करने के लिए फ़ंक्शन स्कीमा के वास्तविक नाम में कॉलम।
विकल्प 2 - sys.objects
आप sys.objects
. का भी उपयोग कर सकते हैं सिस्टम कैटलॉग दृश्य। यदि आप इस विकल्प को चुनते हैं, तो आप इसे प्रकार के अनुसार फ़िल्टर कर सकते हैं ताकि केवल उपयोगकर्ता तालिकाएँ वापस आ जाएँ:
SELECT name
FROM sys.objects
WHERE type = 'U';
यह वर्तमान डेटाबेस से उपयोगकर्ता तालिकाएँ लौटाता है। इस दृश्य में एक schema_id
भी है कॉलम, ताकि आप SCHEMA_NAME()
. का उपयोग कर सकें यदि आवश्यक हो तो इसे स्कीमा नाम में अनुवाद करने के लिए कार्य करें।
विकल्प 3 - information_schema.tables
INFORMATION_SCHEMA.TABLES
दृश्य प्रत्येक तालिका के लिए एक पंक्ति देता है या वर्तमान डेटाबेस में देखता है जिसके लिए वर्तमान उपयोगकर्ता की अनुमति है।
हम इस दृश्य को प्रकार के अनुसार फ़िल्टर कर सकते हैं ताकि केवल आधार तालिकाएँ ही वापस आएँ:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
TABLE_SCHEMA
कॉलम में टेबल स्कीमा नाम है, और इसलिए हमें SCHEMA_NAME()
का उपयोग करने की आवश्यकता नहीं है स्कीमा आईडी को उसके नाम में बदलने के लिए कार्य करता है।
विकल्प 4 - sp_tables
sp_tables
संग्रहीत कार्यविधि उन वस्तुओं की सूची लौटाती है जिन्हें वर्तमान परिवेश में क्वेरी किया जा सकता है। इसका अर्थ है समानार्थी वस्तुओं को छोड़कर कोई भी तालिका या दृश्य।
इस प्रक्रिया को कॉल करने का सबसे तेज़ और आसान तरीका इस प्रकार है:
sp_tables;
लेकिन वह वस्तुओं की एक लंबी सूची लौटा सकता है।
आमतौर पर अधिक विशिष्ट होना बेहतर होता है। उदाहरण के लिए:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
यहाँ, मैं KrankyKranes
. में उपयोगकर्ता तालिकाएँ दिखाने की प्रक्रिया बता रहा हूँ डेटाबेस जो dbo
. के स्वामित्व में है ।
@table_type
तर्क मूल्यों की अल्पविराम से अलग की गई सूची को स्वीकार करता है। इसलिए यदि हम विचारों को शामिल करना चाहते हैं, तो हम निम्न कार्य कर सकते हैं:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
विकल्प 5 - dbo.sysobjects
SQL सर्वर 2005 से पहले, dbo.sysobjects
दृश्य तालिकाओं और अन्य वस्तुओं को दिखाने के लिए दृश्य था।
इसलिए यदि आप SQL सर्वर के पुराने संस्करण का उपयोग कर रहे हैं, तो आप यह कर सकते हैं:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';