在数据库anme上加入sys.columns和sys.tables

Tec*_*hat 5 database sql-server join

我正在写一个使用数据库后端的一个应用程序,但我需要找出所有的列名,他们通过SQL属于表.我知道你可以查询sys.columns,sys.tables以及sys.databases,但我想要做的是加入他们都得到类似如下的结果(基本上显示从数据库中的所有列和表):

+-----------+------------+
| Tablename | columnname |
+-----------+------------+
| Table1    | Id         |
| Table1    | Name       |
| Table1    | Owner      |
| Table2    | Id         |
| Table2    | Name       |
| Table2    | True       |
+-----------+------------+
Run Code Online (Sandbox Code Playgroud)

我已经在sys架构很好看,但我无法找到任何父引用sys.columnssys.tables.

小智 21

Randy Minder的答案是最正确的答案.但是如果你想继续使用sys.columns和sys.tables在object_id上加入它们.

select   tab.name, col.name
from    sys.columns col
inner join sys.tables tab
    on col.object_id = tab.object_id
Run Code Online (Sandbox Code Playgroud)

您可以使用它来自行获取sys.columns表中的表名.

select object_name(object_id),name 
from sys.columns
Run Code Online (Sandbox Code Playgroud)


Ran*_*der 15

您通常不希望直接查询sys.columns或sys.tables(或任何系统表).您应该使用INFORMATION_SCHEMA视图.这些视图是查询系统表的ANSI标准方式,可以在不同版本之间进行更改.INFORMATION_SCHEMA视图不会改变,至少是以破碎的方式.

SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = <TableName> AND TABLE_SCHEMA= <SchemaName>
Run Code Online (Sandbox Code Playgroud)

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