如何使用TSQL获取数据库中所有表的列表?

Ray*_*ega 867 t-sql sql-server database-table

获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?

Sco*_*use 1381

SQL Server 2005,2008,2012,2014或2016:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Run Code Online (Sandbox Code Playgroud)

仅显示特定数据库中的表

SELECT TABLE_NAME 
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE'
Run Code Online (Sandbox Code Playgroud)

要么,

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

PS:对于SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这还包括VIEWS,而不仅仅是表格 (44认同)
  • 添加`WHERE TABLE_TYPE ='BASE TABLE'将只包含基表(并且通过扩展,你总是可以使用`WHERE TABLE_TYPE!='VIEW'`). (22认同)
  • 如果您没有使用特定数据库,请添加数据库名称,因此它将是SELECT TABLE_NAME FROM <DATABASE_NAME> .INFORMATION_SCHEMA.Tables (17认同)
  • sysdiagrams是一个普通的表,你总是需要用`AND name <>'sysdiagrams'来手动排除它. (3认同)
  • “ sysdiagrams”也出现在此列表中:( (2认同)

Mic*_*cah 195

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
Run Code Online (Sandbox Code Playgroud)

以下是您可以搜索的其他对象类型的列表:

  • AF:聚合函数(CLR)
  • C:CHECK约束
  • D:默认或DEFAULT约束
  • F:FOREIGN KEY约束
  • L:记录
  • FN:标量函数
  • FS:汇编(CLR)标量函数
  • FT:汇编(CLR)表值函数
  • IF:内联表功能
  • IT:内部表格
  • P:存储过程
  • PC:汇编(CLR)存储过程
  • PK:PRIMARY KEY约束(类型为K)
  • RF:复制过滤器存储过程
  • S:系统表
  • SN:同义词
  • SQ:服务队列
  • TA:汇编(CLR)DML触发器
  • TF:表函数
  • TR:SQL DML触发器
  • TT:表类型
  • U:用户表
  • UQ:UNIQUE约束(类型为K)
  • V:查看
  • X:扩展存储过程

  • 别名有点多余:`SELECT name FROM sysobjects WHERE xtype ='U'`会做同样的事情. (9认同)
  • 所有xtype的msdn - http://msdn.microsoft.com/en-us/library/ms177596.aspx (3认同)

Sti*_*ack 87

SELECT * FROM INFORMATION_SCHEMA.TABLES 
Run Code Online (Sandbox Code Playgroud)

要么

SELECT * FROM Sys.Tables
Run Code Online (Sandbox Code Playgroud)

  • 只需注意(如其他答案中所述)sys.tables仅在2005年开始提供 (5认同)
  • 在2018年这不是问题。我认为这应该更高:-) (2认同)

小智 35

select * from sys.tables;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT * FROM INFORMATION_SCHEMA.TABLES 
Run Code Online (Sandbox Code Playgroud)

要么

SELECT * FROM sysobjects WHERE xtype='U'
Run Code Online (Sandbox Code Playgroud)


Vik*_*ngh 29

USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO
Run Code Online (Sandbox Code Playgroud)

要么

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO
Run Code Online (Sandbox Code Playgroud)


Ras*_*ihi 11

SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
Run Code Online (Sandbox Code Playgroud)

SQL Server 2012


Ray*_*ega 9

exec sp_msforeachtable 'print ''?'''
Run Code Online (Sandbox Code Playgroud)


dev*_*vio 9

SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;
Run Code Online (Sandbox Code Playgroud)

(SQL Server 2000标准; SQL Server 2005仍然支持.)


spo*_*son 7

select * from sysobjects where xtype='U'


Eri*_*oss 6

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 
Run Code Online (Sandbox Code Playgroud)


小智 6

下面的任何 T-SQL 代码都可以在 SQL Server 2019 中运行:

-- here, you need to prefix the database name in INFORMATION_SCHEMA.TABLES
SELECT TABLE_NAME FROM [MSSQL-TEST].INFORMATION_SCHEMA.TABLES;

-- The next 2 ways will require you to point
-- to the specific database you want to list the tables

USE [MSSQL-TEST];
-- (1) Using sys.tables
SELECT * FROM sys.tables;

-- (2) Using sysobjects
SELECT * FROM sysobjects
WHERE type='U';
Run Code Online (Sandbox Code Playgroud)


小智 6

更新 2022:您可以列出/显示在Microsoft SQL SERVER中使用此简单查询创建的表。

select * from SYS.TABLES;
Run Code Online (Sandbox Code Playgroud)


Ast*_*ain 5

缺点INFORMATION_SCHEMA.TABLES是它还包括系统表(例如dtproperties和)MSpeer_...,无法与您自己的表区分开。

我建议使用sys.objects(已弃用的sysobjects视图的新版本 ),它确实支持排除系统表:

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables
Run Code Online (Sandbox Code Playgroud)


Dar*_*Rob 5

那么您可以使用sys.objects来获取所有数据库对象。

 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO
Run Code Online (Sandbox Code Playgroud)

或者

--  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
Run Code Online (Sandbox Code Playgroud)