TSQL kullanarak bir veritabanındaki tüm tabloların listesini nasıl alabilirim?


Yanıtlar:


1429

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' 

46
Lütfen bunun yalnızca tabloları değil, GÖRÜNÜMLERİ de içereceğini unutmayın
Nathan Koop

17
Belirli bir veritabanı kullanmıyorsanız o <DATABASE_NAME> .INFORMATION_SCHEMA.Tables SELECT TABLE_NAME olacak böylece veritabanı adını ekleyin
Shriroop

22
Ekleme WHERE TABLE_TYPE='BASE TABLE'yalnızca temel tabloları içerir (ve her zaman kullanabileceğiniz uzantılarla WHERE TABLE_TYPE != 'VIEW').
Phillip Copley

3
Bu listede de "sysdiagrams" görünüyor :(
celsowm

4
sysdiagrams normal bir tablodur, her zaman a ile manuel olarak hariç tutmanız gerekir AND name <> 'sysdiagrams'.
Christoph

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

Burada da arayabileceğiniz diğer nesne türlerinin bir listesi:

  • AF: Toplama işlevi (CLR)
  • C: CHECK kısıtlaması
  • D: Varsayılan veya VARSAYILAN kısıtlama
  • F: FOREIGN KEY kısıtlaması
  • L: Günlük
  • FN: Skaler fonksiyon
  • FS: Montaj (CLR) skaler fonksiyon
  • FT: Montaj (CLR) tablo değerli işlev
  • EĞER: Satır içi tablo işlevi
  • IT: Dahili tablo
  • P: Saklı yordam
  • PC: Montaj (CLR) saklı yordamı
  • PK: PRIMARY KEY kısıtlaması (tür K)
  • RF: Çoğaltma filtresi saklı yordamı
  • S: Sistem tablosu
  • SN: Eşanlamlı
  • SQ: Hizmet kuyruğu
  • TA: Montaj (CLR) DML tetikleyicisi
  • TF: Tablo işlevi
  • TR: SQL DML Tetikleyici
  • TT: Masa tipi
  • U: Kullanıcı tablosu
  • UQ: UNIQUE kısıtı (tip K)
  • V: Görüntüle
  • X: Genişletilmiş saklı yordam

9
Takma ad biraz fazla: SELECT name FROM sysobjects WHERE xtype = 'U'aynı şeyi yapardı.
PJSCopeland

Teşekkürler, başlangıçta ben PK,FK,D,C,V,UQkaynak ve hedef veritabanını karşılaştırmak için vb çoklu seçim deyimleri ile denedim , ama sonra VS bu özelliği bulundu , ama bir sql querytam kaynak ve hedef veritabanı karşılaştırmak için değil mi?
shaijut

Biri neden '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!
user919426

87
SELECT * FROM INFORMATION_SCHEMA.TABLES 

VEYA

SELECT * FROM Sys.Tables

5
Sadece (diğer cevaplarda belirtildiği gibi) sys.tables sadece 2005 yılında kullanılabilir bir not
Rob

2
Bu 2018'de bir sorun değil. Bence bu daha yüksek olmalı :-)
Michal B.

29
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

VEYA

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

11
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012



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

(SQL Server 2000 standardı; SQL Server 2005'te hala desteklenmektedir.)



6
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.
Christoph

5

Bunun dezavantajı, kendi tablolarınızdan ayrı olarak anlatmanın hiçbir yolu olmayan INFORMATION_SCHEMA.TABLESsistem tabloları dtpropertiesve 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

2

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:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • vb.

2

Lütfen bunu kullan. Şema adlarıyla birlikte tablo adlarını alırsınız:

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

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

1

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 

1

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

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

Bu bağlantı bu konu hakkında çok daha fazla bilgi sağlayabilir


2
Bu SQL Server için değildir, bu nedenle bu sorunun cevabı değildir.
Dan Getz

0

Kullanılması SELECT * FROM INFORMATION_SCHEMA.COLUMNSayrıca tüm tabloları ve ilgili sütunları gösterir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.