TSQL का उपयोग करके डेटाबेस में सभी तालिकाओं की सूची कैसे प्राप्त करूं?


895

SQL सर्वर पर किसी विशिष्ट डेटाबेस में सभी तालिकाओं के नाम प्राप्त करने का सबसे अच्छा तरीका क्या है?




3
क्या SHOW TABLES(MySQL में प्रयुक्त) काम करता है?
मार्टिन थोमा

जवाबों:


1429

SQL सर्वर 2000, 2005, 2008, 2012, 2014, 2016, 2017 या 2019:

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

किसी विशेष डेटाबेस से केवल तालिकाओं को दिखाने के लिए

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

या,

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
    AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )

PS: SQL Server 2000 के लिए:

SELECT * FROM sysobjects WHERE xtype='U' 

46
कृपया ध्यान दें कि इसमें VIEWS भी शामिल होगा, न केवल टेबल
नथान कोप

17
डेटाबेस नाम जोड़ें यदि आप विशिष्ट डेटाबेस का उपयोग नहीं कर रहे हैं, तो यह <TAT_NAME FROM <DATABASE_NAME> .INFORMATION_SCHEMA.Tables
Shriroop

22
जोड़ने WHERE TABLE_TYPE='BASE TABLE'में केवल बेस टेबल शामिल होंगे (और एक्सटेंशन द्वारा आप हमेशा उपयोग कर सकते हैं WHERE TABLE_TYPE != 'VIEW')।
फिलिप कोपले

3
इस सूची में "sysdiagrams" भी दिखाई देता है :(
celsowm

4
sysdiagrams एक सामान्य तालिका है, आपको हमेशा इसे a के साथ मैन्युअल रूप से बाहर करना होगा AND name <> 'sysdiagrams'
क्रिस्टोफ

199
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

यहां अन्य ऑब्जेक्ट प्रकारों की एक सूची दी गई है जिन्हें आप भी खोज सकते हैं:

  • वायुसेना: सकल कार्य (सीएलआर)
  • सी: चेक बाधा
  • डी: डिफ़ॉल्ट या DEFAULT बाधा
  • एफ: प्रमुख कुंजी बाधा
  • L: लॉग करें
  • एफएन: स्केलर फ़ंक्शन
  • एफएस: विधानसभा (सीएलआर) स्केलर-फ़ंक्शन
  • एफटी: असेंबली (सीएलआर) टेबल-वैल्यू फ़ंक्शन
  • IF: इन-लाइनेड टेबल-फंक्शन
  • आईटी: आंतरिक तालिका
  • पी: संग्रहीत प्रक्रिया
  • पीसी: असेंबली (सीएलआर) संग्रहित-प्रक्रिया
  • PK: प्राथमिक कुंजी बाधा (प्रकार K है)
  • आरएफ: प्रतिकृति फ़िल्टर संग्रहीत कार्यविधि
  • S: सिस्टम तालिका
  • एसएन: पर्यायवाची
  • SQ: सेवा कतार
  • टीए: असेंबली (सीएलआर) डीएमएल ट्रिगर
  • TF: टेबल फ़ंक्शन
  • TR: SQL DML ट्रिगर
  • टीटी: टेबल प्रकार
  • यू: उपयोगकर्ता तालिका
  • UQ: UNIQUE बाधा (प्रकार K है)
  • V: देखें
  • एक्स: विस्तारित संग्रहित प्रक्रिया

9
उपनाम थोड़ा बेमानी है: SELECT name FROM sysobjects WHERE xtype = 'U'वही काम करेगा।
PJSCopeland

धन्यवाद, शुरू में मैंने PK,FK,D,C,V,UQस्रोत और लक्ष्य डेटाबेस की तुलना करने के लिए आदि के लिए कई चुनिंदा बयानों के साथ यह कोशिश की थी , लेकिन फिर मुझे वीएस में यह सुविधा मिली , लेकिन क्या sql queryपूर्ण स्रोत और लक्ष्य डेटाबेस की तुलना करने के लिए नहीं है ?
शैजुत

एक चमत्कार यह 'U'है कि उपयोगकर्ता तालिका की पहचान करने के लिए क्यों उपयोग किया जाता है ... के रूप में शायद 'UT'या सबसे अधिक सहज ज्ञान युक्त 'T'... आह ठीक है, यह काम करता है!
user919426 4

87
SELECT * FROM INFORMATION_SCHEMA.TABLES 

या

SELECT * FROM Sys.Tables

5
बस एक नोट (जैसा कि अन्य उत्तरों में बताया गया है) sys.tables केवल 2005 के बाद से उपलब्ध है
Rob

2
जो 2018 में कोई समस्या नहीं है। मुझे लगता है कि यह अधिक होना चाहिए :-)
मिशाल बी।




9
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000 मानक; अभी भी SQL Server 2005 में समर्थित है।)



6
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams'; क्योंकि Microsoft SQL सर्वर प्रबंधन स्टूडियो द्वारा बनाई गई sysdiagrams तालिका तकनीकी रूप से एक प्रणाली तालिका नहीं है, लेकिन एक हम आम तौर पर वैसे भी बाहर करना पसंद करते हैं।
क्रिस्टोफ

5

इसका नकारात्मक पक्ष INFORMATION_SCHEMA.TABLESयह है कि इसमें सिस्टम टेबल जैसे dtpropertiesऔर टेबल भी शामिल हैं MSpeer_..., जिसमें उन्हें अपने टेबल से अलग बताने का कोई तरीका नहीं है।

मैं उपयोग करने की सलाह दूंगाsys.objects (पदावनत sysobjects दृश्य का नया संस्करण ), जो सिस्टम तालिकाओं को छोड़कर समर्थन करता है:

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables

2

SSMS में, एक विशिष्ट डेटाबेस में सभी पूरी तरह से योग्य तालिका नाम प्राप्त करने के लिए (जैसे, "MyDatabase"):

SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM   MyDatabase.INFORMATION_SCHEMA.Tables
WHERE  [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]

परिणाम:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • आदि।

2

कृपया इसका उपयोग करें। आपको स्कीमा नामों के साथ तालिका नाम मिलेंगे:

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID


1

रे वेगा के लिए धन्यवाद, जिसकी प्रतिक्रिया एक डेटाबेस में सभी उपयोगकर्ता तालिकाएं देती हैं ...

निष्पादित करें sp_msforeachtable 'प्रिंट' '?' ''

sp_helptext अंतर्निहित क्वेरी को दिखाता है, जिसका सार ...

select * from dbo.sysobjects o 
join sys.all_objects syso on o.id =  syso.object_id  
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 
and o.category & 2 = 0 

1

वैसे आप सभी डेटाबेस ऑब्जेक्ट प्राप्त करने के लिए sys.objects का उपयोग कर सकते हैं ।

 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

या

--  For all tables
select * from INFORMATION_SCHEMA.TABLES 
GO 

  --- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO

  --- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO

0
--for oracle
select tablespace_name, table_name from all_tables;

यह लिंक इस विषय पर बहुत अधिक जानकारी प्रदान कर सकता है


2
यह SQL सर्वर के लिए नहीं है, इसलिए इस प्रश्न का उत्तर नहीं है।
डैन गेट्ज़

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.