获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?
SQL Server 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'
或者,
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'
这里也列出了你可以搜索的其他对象类型。
SELECT * FROM INFORMATION_SCHEMA.TABLES
或
SELECT * FROM Sys.Tables
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
或
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
INFORMATION_SCHEMA.TABLES
的缺点是它还包含了系统表,如dtproperties
和MSpeer_...
表,没有办法把它们和自己的表区分开来。
我建议使用 [sys.objects
][1](已被废弃的 [sysobjects][2] 视图的新版本),它确实支持排除系统表。
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
[1]: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql [2]: https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-sysobjects-transact-sql
在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]
结果。
你可以使用sys.objects 来获取所有的数据库对象。
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
您可以简单地先选择您的数据库
use database_name;
然后直接输入
show tables;
--for oracle
select tablespace_name, table_name from all_tables;
这个链接可以提供更多关于这方面的信息 [专题][1]