如何使用TSQL获取数据库中所有表的列表?

时间:2008-10-06 17:53:22

标签: sql-server tsql database-table

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

19 个答案:

答案 0 :(得分:1299)

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' 

答案 1 :(得分:189)

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

以下是您可以搜索的其他对象类型的列表:

  • AF:聚合函数(CLR)
  • C:CHECK约束
  • D:默认或默认约束
  • F:FOREIGN KEY约束
  • L:记录
  • FN:标量函数
  • FS:汇编(CLR)标量函数
  • FT:汇编(CLR)表值函数
  • IF:内联表函数
  • IT:内部表格
  • P:存储过程
  • PC:Assembly(CLR)存储过程
  • PK:PRIMARY KEY约束(类型为K)
  • RF:复制过滤器存储过程
  • S:系统表
  • SN:同义词
  • SQ:服务队列
  • TA:汇编(CLR)DML触发器
  • TF:表格功能
  • TR:SQL DML触发器
  • TT:表格类型
  • U:用户表
  • UQ:UNIQUE约束(类型为K)
  • V:查看
  • X:扩展存储过程

答案 2 :(得分:79)

SELECT * FROM INFORMATION_SCHEMA.TABLES 

SELECT * FROM Sys.Tables

答案 3 :(得分:31)

select * from sys.tables;

OR

SELECT * FROM INFORMATION_SCHEMA.TABLES 

OR

SELECT * FROM sysobjects WHERE xtype='U'

答案 4 :(得分:23)

USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

OR

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

答案 5 :(得分:10)

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

SQL Server 2012

答案 6 :(得分:9)

exec sp_msforeachtable 'print ''?'''

答案 7 :(得分:8)

SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000标准; SQL Server 2005仍然支持。)

答案 8 :(得分:6)

select * from sysobjects where xtype='U'

答案 9 :(得分:5)

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

答案 10 :(得分:4)

INFORMATION_SCHEMA.TABLES的缺点是它还包括系统表,例如dtpropertiesMSpeer_...表,无法将它们与您自己的表分开。

我建议使用sys.objects(已弃用的sysobjects视图的新版本),它支持排除系统表:

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

答案 11 :(得分:2)

在SSMS中,获取特定数据库中的所有完全限定的表名(例如,&#34; MyDatabase&#34;):

$(document).ready(function() {


 $("#addNew").click(function() {
    var maindiv = document.getElementById('nestedFeilds').innerHTML;
    $("#showhere").append(maindiv);
     maindiv.attr('name', 'myid');
  });
});

结果:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4

答案 12 :(得分:2)

请使用此。您将获得表名和模式名称:

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

答案 13 :(得分:1)

您可以先选择数据库

use database_name;

然后输入

show tables;

答案 14 :(得分:1)

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

答案 15 :(得分:1)

感谢Ray Vega,他的回复为数据库中的所有用户表提供了......

  

exec sp_msforeachtable&#39; print&#39;&#39;&#39;&#39;&#39;

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 

答案 16 :(得分:0)

--for oracle
select tablespace_name, table_name from all_tables;

此链接可提供有关此内容的更多信息 topic

答案 17 :(得分:0)

使用SELECT * FROM INFORMATION_SCHEMA.COLUMNS还可以显示所有表和相关列。

答案 18 :(得分:0)

那么您可以使用 sys.objects 来获取所有数据库对象。

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

OR

--  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