Sql server 连接数据库名称上的sys.columns和sys.tables
我正在使用数据库后端编写一个应用程序,但我需要通过SQL找出所有列名及其所属的表。我知道您可以查询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查询系统表的标准方法,这些
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>