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.columns
或sys.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子句在这里是可选的,可以省略以查看所有表中的所有列等.