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


304

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

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

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

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


1
मैसकल के लिए आप सरल कार्य कर सकते हैं। शो ट्यूब;
आशीष गुप्ता

जवाबों:


500

संभवतः जिस तरह से अलग-अलग sql dbms स्कीमा से निपटते हैं।

निम्नलिखित प्रयास करें

SQL सर्वर के लिए:

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


3
मैं इस समाधान पसंद करते हैं जब मैं एक डेटाबेस (SQL सर्वर) के भीतर विभिन्न तालिका स्कीमेता है: का चयन करें concat (TABLE_SCHEMA,, TABLE_NAME '।') से INFORMATION_SCHEMA.TABLES कहां TABLE_TYPE = 'आधार तालिका' और TABLE_CATALOG = 'mydb'
वेरेना Haunschmid

3
जानकारी प्राप्त करने के लिए उस विशेष DB का उपयोग करना चाहिए । USE dbName GOSQL- सर्वर के लिए। यदि आप DB का उपयोग नहीं कर रहे हैं , तो परिणाम प्रदर्शित नहीं होगा, भले ही उस DB में टेबल हों।
बार्न्स

2
मैसकल के लिए आप सरल कार्य कर सकते हैं। शो ट्यूब;
आशीष गुप्ता

SQL सर्वर प्रविष्टि USE dbName GOसर्वर 2014 पर उपसर्ग के बिना मेरे लिए ठीक काम करता है ।
मम्म

1) आपने SQL सर्वर और MySQL 2 के लिए एक ही बात का सुझाव दिया है) INFORMATION_SCHEMA.TABLES केवल MySQL 3 में मौजूद है) मुझे वास्तव में आश्चर्य है कि आपको इसके लिए कितने उत्थान मिले हैं ...
Apostolos

82

यहाँ से चोरी :

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

3
शायद सबसे ज्यादा सिलेक्ट नाम से sys.Tables जहां is_ms_shipped = 0
om471987

1
यह डेटाबेस प्रदाता विशिष्ट है, और ANSI SQL संगत नहीं है।
cjb110

1
वैकल्पिक रूप से, का चयन करें * yourdbname.sys.Tables से; यदि आप अधिक संक्षिप्त होना पसंद करते हैं। SQL सर्वर में काम करता है, कम से कम।
हिरन

29

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

USE DBName
GO 
SELECT *
FROM sys.Tables
GO

नहीं, यह केवल पार्ट सेपरेटर है। आप अन्य में बदल सकते हैं। टी-एसक्यूएल सिंटैक्स नहीं।
AishMarokey

1
USE DatabaseSample चयन * sys.Tables से
हमज़ेह सोबोह

17
USE DBName;
SELECT * FROM sys.Tables;

हम GOइन-प्लेस के बिना सौदा कर सकते हैं आप अर्धविराम का उपयोग कर सकते हैं ;


3
एज़्योर पर SQL सर्वर के लिए, इसने मेरे लिए काम किया, लेकिन स्वीकृत उत्तर नहीं दिया। धन्यवाद।
जोनाह

14

बस DATABASE NAMEसामने रखें INFORMATION_SCHEMA.TABLES:

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

10

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

SHOW TABLES;

DB का चयन करने के बाद:

USE db_name

ऑसम ,,, स्वेट एन शॉर्ट
दीपा एमजी

यह MySQL है, प्रश्न को टैग किया गया है MSSQL सर्वर
मेले

@ मैले सवाल के विवरण को देखें
लोरेंजो लैर्ट

यह सबसे अच्छा उत्तर नहीं है, स्वीकृत (और सही) उत्तर के तहत मेरी टिप्पणी देखें।
चिवड़ा



2
select * from sys.tables
order by schema_id      --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go

कोई भी मौका आप इस बारे में थोड़ा विस्तार से बता सकते हैं? शायद इसकी व्याख्या करें?
एलेक्स के

1
Exec sp_MSforeachtable 'Select ''?'''

हाय अमीरेज़ा, मेरा मानना ​​है कि आप किस बारे में बात कर रहे हैं sp_MSforeachtable?
बुम्मी

@ बम्मी: हाँ बहुत बढ़िया, टाइपिंग मिस्टेक के लिए धन्यवाद और सॉरी। संपादित
अमीर केशवराज

1
USE dbName;

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

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

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

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


1

MSSQL सर्वर के नवीनतम संस्करण के लिए अद्यतन (17.7)

SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'

या SELECT *सभी कॉलम प्राप्त करने के लिए।


मुझे सिर्फ एहसास हुआ कि यह क्वेरी गैर-अंग्रेजी वर्णों के लिए तालिका नाम में गलत परिणाम देती है जबकि माइकल बेयोन सही परिणाम देता है। (चरित्र तुर्की भाषा के लोअरकेस "ı" में था)
onur demir

1

नीचे डेटाबेस क्वेरी का चयन करने के लिए:

use DatabaseName

अभी

SELECT * FROM INFORMATION_SCHEMA.TABLES

अब आप कंसोल में नीचे बनाई गई तालिकाओं को देख सकते हैं।

पीएफए।

सवाल


0

हाँ oracle है:

select * from user_tables

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


वे क्रॉस प्रदाता प्रश्नों की तलाश में हैं जो प्रदाता विशिष्ट नहीं हैं।
cjb110

Sql से ऐसा करने का कोई सुसंगत तरीका नहीं है क्योंकि सभी db इंजन डेटा डिक्शनरी को अलग तरह से लागू करते हैं। Jdbc / odbc और C / Java / C # जैसी 3GL भाषा का उपयोग करके इसे अमूर्त करना संभव हो सकता है यदि यह एक प्रोग्रामेटिक आवश्यकता है, तो निश्चित रूप से संभव है यदि आपके पास प्रत्येक डेटाबेस के लिए एक अलग कार्यान्वयन है। सेशन को अपनी आवश्यकताओं को स्पष्ट करना चाहिए ...
kayakpim

0

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

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

0

हमारे डीबी (पीएल / एसक्यूएल) में कोड के नीचे काम करने के लिए सभी की सूची हमारे डीबी में मौजूद है।

select * from tab;

तथा

select table_name from tabs;

दोनों काम कर रहे हैं। चलो कोशिश करो और तुम्हारा पता लगाएं।


0

बस नीचे के साथ यह सभी जानकारी प्राप्त करें

    SELECT t.TABLE_NAME , t.ENGINE , t.TABLE_ROWS ,t.AVG_ROW_LENGTH, 
t.INDEX_LENGTH FROM 
INFORMATION_SCHEMA.TABLES as t where t.TABLE_SCHEMA = 'YOURTABLENAMEHERE' 
order by t.TABLE_NAME ASC limit 10000;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.