获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?
SQL Server 2005,2008,2012,2014或2016:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
仅显示特定数据库中的表
SELECT TABLE_NAME FROM.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'
以下是您可以搜索的其他对象类型的列表:
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 * 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
要么
USE YourDBName GO SELECT * FROM INFORMATION_SCHEMA.TABLES GO
SELECT * FROM information_schema.tables where TABLE_TYPE = 'BASE TABLE'
SQL Server 2012
exec sp_msforeachtable 'print ''?'''
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_...
,无法与您自己的表区分开。
我建议使用sys.objects
(已弃用的sysobjects视图的新版本 ),它确实支持排除系统表:
select * from sys.objects where type = 'U' -- User tables and is_ms_shipped = 0 -- Exclude system tables