Sql server 如何使用TSQL获取数据库中所有表的列表?
获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?Sql server 如何使用TSQL获取数据库中所有表的列表?,sql-server,tsql,database-table,Sql Server,Tsql,Database Table,获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?select*from sysobjects where xtype='U'select*from sysobjects where xtype='U' 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*from sysobjects where xtype='U'
exec sp_msforeachtable 'print ''?'''
SELECT name
FROM sysobjects
WHERE xtype='U'
ORDER BY name;
(SQL Server 2000标准;在SQL Server 2005中仍受支持。)
(SQL Server 2000标准;在SQL Server 2005中仍受支持。)
或
或
SQL Server 2000、2005、2008、2012、2014、2016、2017或2019:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
仅显示特定数据库中的表
SELECT TABLE_NAME
FROM [<DATABASE_NAME>].INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
注:对于SQL Server 2000:
SELECT * FROM sysobjects WHERE xtype='U'
SQL Server 2000、2005、2008、2012、2014、2016、2017或2019:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
仅显示特定数据库中的表
SELECT TABLE_NAME
FROM [<DATABASE_NAME>].INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
注:对于SQL Server 2000:
SELECT * FROM sysobjects WHERE xtype='U'
以下是您还可以搜索的其他对象类型的列表:
- AF:聚合函数(CLR)
- C:检查约束
- D:默认或默认约束
- F:外键约束
- L:原木
- FN:标量函数
- FS:汇编(CLR)标量函数
- FT:汇编(CLR)表值函数
- IF:行内表格函数
- IT:内部表格
- 存储过程
- PC:程序集(CLR)存储过程
- 主键约束(类型为K)
- RF:复制筛选器存储过程
- 系统表
- 同义词
- SQ:服务队列
- TA:程序集(CLR)DML触发器
- TF:表函数
- TR:sqldml触发器
- TT:表格类型
- U:用户表
- UQ:唯一约束(类型为K)
- V:视图
- X:扩展存储过程
- AF:聚合函数(CLR)
- C:检查约束
- D:默认或默认约束
- F:外键约束
- L:原木
- FN:标量函数
- FS:汇编(CLR)标量函数
- FT:汇编(CLR)表值函数
- IF:行内表格函数
- IT:内部表格
- 存储过程
- PC:程序集(CLR)存储过程
- 主键约束(类型为K)
- RF:复制筛选器存储过程
- 系统表
- 同义词
- SQ:服务队列
- TA:程序集(CLR)DML触发器
- TF:表函数
- TR:sqldml触发器
- TT:表格类型
- U:用户表
- UQ:唯一约束(类型为K)
- V:视图
- X:扩展存储过程
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
SQL Server 2012
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
或
或
这个链接可以提供更多关于这方面的信息
这个链接可以提供更多关于这方面的信息
多亏了Ray Vega,他的回答给出了数据库中的所有用户表 exec sp_msforeachtable“打印”?“” 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
多亏了Ray Vega,他的回答给出了数据库中的所有用户表 exec sp_msforeachtable“打印”?“” 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
INFORMATION\u SCHEMA.TABLES
的缺点是,它还包括系统表,如dtproperties
和MSpeer\u…
表,无法将它们与您自己的表区分开来
我建议使用(不推荐使用的视图的新版本),它不支持排除系统表:
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
INFORMATION\u SCHEMA.TABLES
的缺点是,它还包括系统表,如dtproperties
和MSpeer\u…
表,无法将它们与您自己的表区分开来
我建议使用(不推荐使用的视图的新版本),它不支持排除系统表:
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
在SSMS中,要获取特定数据库(例如“MyDatabase”)中的所有完全限定表名,请执行以下操作:
选择[TABLE_CATALOG]+'.+[TABLE_SCHEMA]+'.+[TABLE_NAME]
来自MyDatabase.INFORMATION\u SCHEMA.Tables
其中[表类型]=“基本表”和[表名称]“系统图”
按[表格模式],[表格名称]排序
结果:
- MyDatabase.dbo.MyTable1
- MyDatabase.dbo.MyTable2
- MyDatabase.MySchema.MyTable3
- MyDatabase.MySchema.MyTable4
- 等等
选择[TABLE_CATALOG]+'.+[TABLE_SCHEMA]+'.+[TABLE_NAME]
来自MyDatabase.INFORMATION\u SCHEMA.Tables
其中[表类型]=“基本表”和[表名称]“系统图”
按[表格模式],[表格名称]排序
结果:
- MyDatabase.dbo.MyTable1
- MyDatabase.dbo.MyTable2
- MyDatabase.MySchema.MyTable3
- MyDatabase.MySchema.MyTable4
- 等等
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
请用这个。您将获得表名和架构名:
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
使用
SELECT*FROM INFORMATION\u SCHEMA。COLUMNS
还显示所有表和相关列。使用SELECT*FROM INFORMATION\u SCHEMA。COLUMNS
还显示所有表和相关列。您可以使用sys.objects获取所有数据库对象
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
或
您可以使用sys.objects来获取所有数据库对象
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
或
请注意(如其他答案中所述)sys.tables仅在2005年以后可用,2018年不成问题。我认为这应该更高:-)请注意(如其他答案中所述)sys.tables仅在2005年以后可用,2018年不成问题。我认为这应该更高:-),
SHOW TABLES
(在MySQL中使用)有效吗?,SHOW TABLES
(在MySQL中使用)有效吗?请注意,这还包括视图,而不仅仅是表如果不使用特定数据库,则添加数据库名称,以便
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
-- 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