SQL क्वेरी द्वारा किसी विशेष डेटाबेस के सभी तालिका नाम प्राप्त करें?




sql-server (11)

मैं एप्लिकेशन पर काम कर रहा हूं जो "MySQL" और "एमएस एसक्यूएल सर्वर" जैसे कई डेटाबेस सर्वरों से निपट सकता है।

मैं एक सामान्य क्वेरी का उपयोग करके किसी विशेष डेटाबेस के टेबल 'नाम प्राप्त करना चाहता हूं जो सभी डेटाबेस प्रकारों के लिए उपयुक्त होना चाहिए। मैंने निम्नलिखित कोशिश की है:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

लेकिन यह किसी विशेष सर्वर के सभी डेटाबेस के टेबल नाम दे रहा है लेकिन मैं केवल चयनित डेटाबेस के टेबल नाम प्राप्त करना चाहता हूं। किसी विशेष डेटाबेस की टेबल प्राप्त करने के लिए मैं इस क्वेरी को कैसे प्रतिबंधित कर सकता हूं?


here से चोरी हुई:

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

USE dbName;

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME

यदि आप किसी एमएस एसक्यूएल सर्वर पर एकाधिक स्कीमाटा के साथ काम कर रहे हैं, तो TABLE_SCHEMA का चयन किए बिना TABLE_NAME को चुनकर सीमित लाभ हो सकता है, इसलिए मैंने माना है कि हम एमएस एसक्यूएल सर्वर का उपयोग करते समय ज्ञात स्कीमा से संबंधित टेबल में रूचि रखते हैं।

मैंने एक SQL सर्वर डेटाबेस का उपयोग कर SQL सर्वर प्रबंधन स्टूडियो के साथ उपरोक्त क्वेरी का परीक्षण किया है और MySQL वर्कबेंच के साथ एक MySQL डेटाबेस का उपयोग कर, और दोनों मामलों में यह तालिका नाम देता है।

क्वेरी माइकल बेयलॉन के दो अलग-अलग प्रश्नों को उसमें घुमाती है जो तब डेटाबेस प्रकार पर चल सकती है। WHERE क्लॉज का पहला भाग MySQL डेटाबेस पर काम करता है और दूसरा भाग (OR के बाद) एमएस एसक्यूएल सर्वर डेटाबेस पर काम करता है। यह बदसूरत और तार्किक रूप से थोड़ा गलत है क्योंकि ऐसा लगता है कि डेटाबेस के समान नाम के साथ कोई अवांछित स्कीमा नहीं है। यह किसी ऐसे व्यक्ति की सहायता कर सकता है जो एक एकल क्वेरी की तलाश में है जो डेटाबेस सर्वर पर चल सकता है।


Exec sp_MSforeachtable 'Select ''?'''

शायद विभिन्न एसक्यूएल डीबीएमएस स्कीमा के साथ सौदा करने के तरीके के कारण।

निम्नलिखित कोशिश करें

एसक्यूएल सर्वर के लिए:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'

MySQL के लिए:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' 

ओरेकल के लिए मुझे लगता है कि बराबर DBA_TABLES का उपयोग करना होगा।


बस DATABASE NAME INFORMATION_SCHEMA.TABLES सामने रखें। टैबलेट:

select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'

MySQL में, उपयोग करें:

SHOW TABLES;

डीबी के साथ चयन करने के बाद:

USE db_name

माइकल बायलॉन के जवाब से बिल्डिंग, मुझे एक सूची की आवश्यकता थी जिसमें स्कीमा की जानकारी भी शामिल थी और इस तरह मैंने अपनी क्वेरी को संशोधित किया।

SELECT TABLE_SCHEMA + '.' + TABLE_NAME as 'Schema.Table'
  FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'dbName'
  ORDER BY TABLE_SCHEMA, TABLE_NAME

मुझे यह जवाब नहीं मिला लेकिन हे, मैं यही करता हूं:

SELECT name FROM databaseName.sys.Tables;

निम्न क्वेरी DBName नामक डेटाबेस में सभी Tables का चयन करेगी:

USE DBName
GO 
SELECT *
FROM sys.Tables
GO

हाँ ओरेकल है:

select * from user_tables

यही है अगर आप केवल लॉग इन user/schema स्वामित्व वाली वस्तुओं को चाहते हैं अन्यथा आप all_tables या dba_tables उपयोग कर सकते हैं जिसमें सिस्टम टेबल शामिल हैं।


MySQL के लिए आप सरल कर सकते हैं। टेबल दिखाएं;





sql-server