SQL Server'da belirli bir veritabanındaki tüm tabloların adlarını almanın en iyi yolu nedir?
SHOW TABLES
çalışmalarında (MySQL kullanıldığı gibi)?
SQL Server'da belirli bir veritabanındaki tüm tabloların adlarını almanın en iyi yolu nedir?
SHOW TABLES
çalışmalarında (MySQL kullanıldığı gibi)?
Yanıtlar:
SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 veya 2019:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Yalnızca belirli bir veritabanındaki tabloları göstermek için
SELECT TABLE_NAME
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
Veya,
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 için:
SELECT * FROM sysobjects WHERE xtype='U'
WHERE TABLE_TYPE='BASE TABLE'
yalnızca temel tabloları içerir (ve her zaman kullanabileceğiniz uzantılarla WHERE TABLE_TYPE != 'VIEW'
).
AND name <> 'sysdiagrams'
.
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
Burada da arayabileceğiniz diğer nesne türlerinin bir listesi:
SELECT name FROM sysobjects WHERE xtype = 'U'
aynı şeyi yapardı.
'U'
Kullanıcı Tablosunu tanımlamak için kullanıldığını merak ediyor ... belki 'UT'
ya da en sezgisel aksine 'T'
... Ah iyi, bu işe yarıyor!
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
VEYA
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
SQL Server 2012
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams';
çünkü Microsoft SQL Server Management Studio tarafından oluşturulmuş olmasına rağmen sysdiagrams tablosu teknik olarak bir sistem tablosu değil, genellikle yine de hariç tutmak istiyoruz.
Bunun dezavantajı, kendi tablolarınızdan ayrı olarak anlatmanın hiçbir yolu olmayan INFORMATION_SCHEMA.TABLES
sistem tabloları dtproperties
ve tablolar içermesidir MSpeer_...
.
Sistem tabloları hariç tutmayı destekleyen sys.objects
(kullanımdan kaldırılmış sysobjects görünümünün yeni sürümü) kullanmanızı öneririm :
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
SSMS'de, belirli bir veritabanındaki tüm nitelikli tablo adlarını almak için (ör., "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]
Sonuçlar:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME
Tüm kullanıcı tablolarını veritabanında veren Ray Vega sayesinde ...
exec sp_msforeachtable 'yazdır' '?' ''
sp_helptext, özetlenen temel sorguyu gösterir ...
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
Peki tüm veritabanı nesnelerini almak için sys.objects kullanabilirsiniz .
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
VEYA
-- 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
Kullanılması SELECT * FROM INFORMATION_SCHEMA.COLUMNS
ayrıca tüm tabloları ve ilgili sütunları gösterir.