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.