Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 连接数据库名称上的sys.columns和sys.tables_Sql Server_Database_Join - Fatal编程技术网

Sql server 连接数据库名称上的sys.columns和sys.tables

Sql server 连接数据库名称上的sys.columns和sys.tables,sql-server,database,join,Sql Server,Database,Join,我正在使用数据库后端编写一个应用程序,但我需要通过SQL找出所有列名及其所属的表。我知道您可以查询sys.columns、sys.tables和sys.databases,但我想做的是将它们全部连接起来,以获得如下结果(基本上显示数据库中的所有列和表): 我仔细查看了sys模式,但在sys.columns或sys.tables中找不到任何父引用。通常,您不希望直接查询sys.columns或sys.tables(或任何系统表)。您应该使用信息模式视图。这些视图是ANSI查询系统表的标准方法,这些

我正在使用数据库后端编写一个应用程序,但我需要通过SQL找出所有列名及其所属的表。我知道您可以查询
sys.columns
sys.tables
sys.databases
,但我想做的是将它们全部连接起来,以获得如下结果(基本上显示数据库中的所有列和表):


我仔细查看了sys模式,但在
sys.columns
sys.tables
中找不到任何父引用。通常,您不希望直接查询sys.columns或sys.tables(或任何系统表)。您应该使用信息模式视图。这些视图是ANSI查询系统表的标准方法,这些表可能会随着版本的变化而变化。架构视图中的信息不会改变,至少不会改变

SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = <TableName> AND TABLE_SCHEMA= <SchemaName>
选择列名称,*
从信息_SCHEMA.COLUMNS
其中TABLE_NAME=和TABLE_SCHEMA=

当然,WHERE子句在这里是可选的,可以省略以查看所有表中的所有列等。

Randy Minder的答案是最正确的。但如果您想继续使用sys.columns和sys.tables,请在object_id上连接它们

选择tab.name,col.name
从sys.columns
“内部联接系统表”选项卡
在col.object\u id=tab.object\u id上
您可以使用它自己从sys.columns表中获取表名

选择对象名称(对象id)、名称
从sys.columns

好吧,
信息模式
在有很多表的情况下速度很慢(像这样的查询在我的数据库上大约需要30秒,我有大约1800个表,其中一半以上是由bug创建的,这就是为什么我们注意到了这一点-对sys.columns的查询几乎是即时的)。是的,我知道,这不是“一般”情况,仅供参考:)
SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = <TableName> AND TABLE_SCHEMA= <SchemaName>