关于sql server:如何使用TSQL获取数据库中所有表的列表?

How do I get list of all tables in a database using TSQL?

获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?


SQL Server 2005年、2008年、2012年和2016年,2014年。

1
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

特别是对数据库表中显示。

1
2
3
SELECT TABLE_NAME
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

或者,

1
2
3
4
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。

1
SELECT * FROM sysobjects WHERE xtype='U'


1
2
3
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

这里是一个列表中的其他对象类型的搜索是好的:你可以

  • 房颤:聚集函数(CLR)
  • C:检查约束
  • D:默认或默认值约束
  • F:外键约束
  • L:日志
  • 标量函数):
  • 财政司司长:组件(CLR)的标量函数
  • 金融时报:组件(CLR)表值函数
  • 如果在衬里表函数
  • 它的内部表
  • P:存储过程
  • PC汇编(CLR)中存储的程序
  • PK:主键约束(是K型)
  • 射频滤波器:复制存储过程。
  • S:系统表
  • 锡:synonym
  • 平方:服务队列
  • 塔:DML触发器组件(CLR)
  • TF:表函数
  • TR:SQL DML触发器
  • TT型:表
  • U:用户表
  • 昆士兰大学:独特的约束(是K型)
  • 视图(V):
  • 扩展存储过程


1
SELECT * FROM INFORMATION_SCHEMA.TABLES

1
SELECT * FROM Sys.Tables


1
select * from sys.tables;

1
SELECT * FROM INFORMATION_SCHEMA.TABLES

1
SELECT * FROM sysobjects WHERE xtype='U'

1
2
3
4
5
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO

1
2
3
4
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO

1
2
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012


1
exec sp_msforeachtable 'print ''?'''

1
2
3
4
SELECT name
FROM sysobjects
WHERE xtype='U'
ORDER BY name;

SQL Server 2000标准;还支持在SQL Server 2005)。


select * from sysobjects where xtype='U'


1
2
3
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'


它的缺点是:INFORMATION_SCHEMA.TABLES系统还包括如dtproperties表和表中的方式与MSpeer_...告诉他们,除了您自己的表。

我会建议使用sys.objects(最新的版本,其中取消的sysobjects视图):排除系统不支持.

1
2
3
4
select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables


在全国,让所有的完全合格域名数据库中的特定表的(例如,"名称"):

1
2
3
4
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
  • 等。

请使用这个。你将得到:随着表名称模式名称

1
2
3
4
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

1
2
3
4
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME

感谢射线维加,其响应了用户数据库中所有表…………………

exec sp_msforeachtable 'print ''?'''

节目查询_ helptext SP的底层,它总结了…

1
2
3
4
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

你可以简单地选择你的数据库的第一

1
use database_name;

那只是型

1
show tables;


1
2
--for oracle
select tablespace_name, table_name from all_tables;

这个链接可以提供多的信息。主题


你可以使用,以获得良好的sys.objects所有数据库对象。

1
2
3
 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

1
2
3
4
5
6
7
8
9
10
11
--  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

你也用SELECT * FROM INFORMATION_SCHEMA.COLUMNS节目表和相关的列。