如何使用TSQL获取数据库中所有表的列表?
在SQL Server的特定数据库中获取所有表的名称的最佳方法是什么?
SQL Server 2005,2008,2012,2014或2016:
 SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' 
仅显示来自特定数据库的表格
 SELECT TABLE_NAME FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' 
要么,
 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:
 SELECT * FROM sysobjects WHERE xtype='U' 
 SELECT sobjects.name FROM sysobjects sobjects WHERE sobjects.xtype = 'U' 
以下是您可以search的其他对象types的列表:
- AF:聚合函数(CLR)
- C:CHECK约束
- D:默认或DEFAULT约束
- F:FOREIGN KEY约束
- L:日志
- FN:标量函数
- FS:汇编(CLR)标量函数
- FT:汇编(CLR)表值函数
- IF:内联表函数
- IT:内部表
- P:存储过程
- PC:程序集(CLR)存储过程
- PK:PRIMARY KEY约束(types是K)
- RF:复制filter存储过程
- S:系统表
- SN:同义词
- SQ:服务队列
- TA:程序集(CLR)DML触发器
- TF:表函数
- TR:SQL DML触发器
- TT:表格types
- U:用户表
- UQ:UNIQUE约束(types是K)
- V:查看
- X:扩展存储过程
 SELECT * FROM INFORMATION_SCHEMA.TABLES 
要么
 SELECT * FROM Sys.Tables 
 select * from sys.tables; 
要么
 SELECT * FROM INFORMATION_SCHEMA.TABLES 
要么
 SELECT * FROM sysobjects WHERE xtype='U' 
 USE YourDBName GO SELECT * FROM sys.Tables GO 
 exec sp_msforeachtable 'print ''?''' 
 SELECT * FROM information_schema.tables where TABLE_TYPE = 'BASE TABLE' 
SQL Server 2012
 SELECT name FROM sysobjects WHERE xtype='U' ORDER BY name; 
(SQL Server 2000标准;仍然在SQL Server 2005中受支持)
 select * from sysobjects where xtype='U' 
 SELECT sobjects.name FROM sysobjects sobjects WHERE sobjects.xtype = 'U' 
  INFORMATION_SCHEMA.TABLES的缺点是它也包含了系统表(如dtproperties和MSpeer_...表),无法将它们与您自己的表区分开来。 
 我build议使用sys.objects (不推荐使用的sysobjects视图的新版本),它支持排除系统表: 
 select * from sys.objects where type = 'U' -- User tables and is_ms_shipped = 0 -- Exclude system tables 
你可以简单地select你的数据库
 use database_name; 
然后input
 show tables; 
在SSMS中,要获取特定数据库中的所有完全限定的表名(例如“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] 
结果:
- MyDatabase.dbo.MyTable1
- MyDatabase.dbo.MyTable2
- MyDatabase.MySchema.MyTable3
- MyDatabase.MySchema.MyTable4
- 等等
 --for oracle select tablespace_name, table_name from all_tables; 
此链接可以提供有关此主题的更多信息
 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' ORDER BY TABLE_NAME 
感谢Ray Vega,他的回应给出了数据库中的所有用户表。
exec sp_msforeachtable'print''?'''
sp_helptext显示底层查询,其中总结到…
 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