Bagaimana cara mendapatkan daftar semua tabel dalam database menggunakan TSQL?

Jawaban:

1429

SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 atau 2019:

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

Untuk hanya menampilkan tabel dari database tertentu

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

Atau,

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

PS: Untuk SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' 
ScottStonehouse
sumber
46
Harap dicatat bahwa ini juga akan mencakup LIHAT, tidak hanya tabel
Nathan Koop
17
Tambahkan nama basis data jika Anda tidak menggunakan basis data spesifik sehingga akan SELECT TABLE_NAME DARI <DATABASE_NAME> .INFORMATION_SCHEMA.Tabel
Shriroop
22
Menambahkan WHERE TABLE_TYPE='BASE TABLE'hanya akan menyertakan tabel dasar (dan dengan ekstensi Anda selalu dapat menggunakan WHERE TABLE_TYPE != 'VIEW').
Phillip Copley
3
"sysdiagrams" juga muncul dalam daftar ini :(
celsowm
4
sysdiagrams adalah tabel normal, Anda harus selalu mengecualikannya secara manual dengan a AND name <> 'sysdiagrams'.
Christoph
199
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Berikut adalah daftar jenis objek lain yang dapat Anda cari juga:

  • AF: Fungsi agregat (CLR)
  • C: PERIKSA kendala
  • D: Batasan standar atau DEFAULT
  • F: Kendala KUNCI ASING
  • L: Log
  • FN: Fungsi skalar
  • FS: Fungsi skalar Majelis (CLR)
  • FT: Assembly-CLR (fungsi tabel bernilai fungsi)
  • JIKA: In-lined table-function
  • IT: Tabel internal
  • P: Prosedur tersimpan
  • PC: Prosedur tersimpan perakitan (CLR)
  • PK: Kendala KUNCI UTAMA (tipe adalah K)
  • RF: Replikasi prosedur tersimpan
  • S: Tabel sistem
  • SN: Sinonim
  • SQ: Antrian layanan
  • TA: Pemicu DML perakitan (CLR)
  • TF: Fungsi tabel
  • TR: Pemicu SQL DML
  • TT: Jenis tabel
  • U: Tabel pengguna
  • UQ: Batasan UNIK (tipe adalah K)
  • V: Lihat
  • X: Prosedur tersimpan yang diperpanjang
Mikha
sumber
9
Alias ​​itu agak berlebihan: SELECT name FROM sysobjects WHERE xtype = 'U'akan melakukan hal yang sama.
PJSCopeland
Terima kasih, pada awalnya saya mencoba ini dengan beberapa pernyataan pilih untuk PK,FK,D,C,V,UQdll untuk membandingkan sumber dan target basis data, tetapi kemudian saya menemukan fitur ini di VS, tetapi apakah tidak ada sql queryuntuk membandingkan sumber lengkap dan basis data target?
shaijut
Orang bertanya-tanya mengapa 'U'digunakan untuk mengidentifikasi Tabel Pengguna ... sebagai lawan dari mungkin 'UT'atau, yang paling intuitif, 'T'... Ah, ini bekerja!
user919426
87
SELECT * FROM INFORMATION_SCHEMA.TABLES 

ATAU

SELECT * FROM Sys.Tables
Pelit
sumber
5
Hanya sebuah catatan yang (seperti disebutkan dalam jawaban lain) sys.tables hanya tersedia pada tahun 2005 dan seterusnya
Rob
2
Yang bukan masalah di 2018. Saya pikir ini harus lebih tinggi :-)
Michal B.
29
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

ATAU

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO
Vikash Singh
sumber
11
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012

Rasoul Zabihi
sumber
9
exec sp_msforeachtable 'print ''?'''
sinar
sumber
9
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000 standar; masih didukung dalam SQL Server 2005.)

devio
sumber
7

select * from sysobjects where xtype='U'

spoulson
sumber
6
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 
Erikk Ross
sumber
SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams'; karena tabel sysdiagrams walaupun dibuat oleh Microsoft SQL Server Management Studio secara teknis bukan tabel sistem tetapi biasanya kita ingin mengecualikannya.
Christoph
5

Kelemahannya INFORMATION_SCHEMA.TABLESadalah ia juga termasuk tabel sistem seperti dtpropertiesdan MSpeer_...tabel, tanpa ada cara untuk membedakannya dari tabel Anda sendiri.

Saya akan merekomendasikan menggunakan sys.objects(versi baru dari tampilan sysobjects usang ), yang mendukung tidak termasuk tabel sistem:

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

Di SSMS, untuk mendapatkan semua nama tabel yang sepenuhnya memenuhi syarat dalam database tertentu (Misalnya, "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]

Hasil:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • dll.
Perangkat Lunak Scott
sumber
2

Silakan gunakan ini. Anda akan mendapatkan nama tabel bersama dengan nama skema:

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
Vikash
sumber
1
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME
Pengembang
sumber
1

Terima kasih kepada Ray Vega, yang tanggapannya memberikan semua tabel pengguna dalam database ...

exec sp_msforeachtable 'print' '?' ''

sp_helptext menunjukkan kueri yang mendasarinya, yang merangkum ke ...

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 
jujur
sumber
1

Anda dapat menggunakan sys.objects untuk mendapatkan semua objek basis data.

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

ATAU

--  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
DarkRob
sumber
0
--for oracle
select tablespace_name, table_name from all_tables;

Tautan ini dapat memberikan lebih banyak informasi tentang topik ini

Demietra95
sumber
2
Ini bukan untuk SQL Server, jadi bukan jawaban untuk pertanyaan ini.
Dan Getz
0

Menggunakan SELECT * FROM INFORMATION_SCHEMA.COLUMNS juga menampilkan semua tabel dan kolom terkait.

Masoud Darvishian
sumber