如何使用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