SQL सर्वर पर किसी विशिष्ट डेटाबेस में सभी तालिकाओं के नाम प्राप्त करने का सबसे अच्छा तरीका क्या है?
SHOW TABLES
(MySQL में प्रयुक्त) काम करता है?
SQL सर्वर पर किसी विशिष्ट डेटाबेस में सभी तालिकाओं के नाम प्राप्त करने का सबसे अच्छा तरीका क्या है?
SHOW TABLES
(MySQL में प्रयुक्त) काम करता है?
जवाबों:
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'
WHERE TABLE_TYPE='BASE TABLE'
में केवल बेस टेबल शामिल होंगे (और एक्सटेंशन द्वारा आप हमेशा उपयोग कर सकते हैं WHERE TABLE_TYPE != 'VIEW'
)।
AND name <> 'sysdiagrams'
।
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
यहां अन्य ऑब्जेक्ट प्रकारों की एक सूची दी गई है जिन्हें आप भी खोज सकते हैं:
SELECT name FROM sysobjects WHERE xtype = 'U'
वही काम करेगा।
'U'
है कि उपयोगकर्ता तालिका की पहचान करने के लिए क्यों उपयोग किया जाता है ... के रूप में शायद 'UT'
या सबसे अधिक सहज ज्ञान युक्त 'T'
... आह ठीक है, यह काम करता है!
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
या
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
SQL सर्वर 2012
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams';
क्योंकि Microsoft SQL सर्वर प्रबंधन स्टूडियो द्वारा बनाई गई sysdiagrams तालिका तकनीकी रूप से एक प्रणाली तालिका नहीं है, लेकिन एक हम आम तौर पर वैसे भी बाहर करना पसंद करते हैं।
इसका नकारात्मक पक्ष 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
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]
परिणाम:
रे वेगा के लिए धन्यवाद, जिसकी प्रतिक्रिया एक डेटाबेस में सभी उपयोगकर्ता तालिकाएं देती हैं ...
निष्पादित करें 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
वैसे आप सभी डेटाबेस ऑब्जेक्ट प्राप्त करने के लिए 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
--for oracle
select tablespace_name, table_name from all_tables;
यह लिंक इस विषय पर बहुत अधिक जानकारी प्रदान कर सकता है
का उपयोग करना SELECT * FROM INFORMATION_SCHEMA.COLUMNS
भी आप सभी तालिकाओं और संबंधित स्तंभों को दिखाता है।