Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用TSQL获取数据库中所有表的列表?_Sql Server_Tsql_Database Table - Fatal编程技术网

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

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中仍受

获取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中仍受支持。)

(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:扩展存储过程
SQL Server 2012

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

在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
  • 等等

请使用这个。您将获得表名和架构名:

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