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' 

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

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

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

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 standar; masih didukung dalam SQL Server 2005.)



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

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

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.

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

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

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 

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

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

Tautan ini dapat memberikan lebih banyak informasi tentang topik ini


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.