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

时间:2016-06-17 10:59:00

标签: sql-server database join

我正在使用数据库后端编写应用程序,但我需要通过SQL查找所有列名和它们所属的表。我知道您可以查询sys.columnssys.tablessys.databases,但我想要做的就是将它们全部加入以获得类似下面的结果(基本上显示来自的所有列和表) DB):

+-----------+------------+
| Tablename | columnname |
+-----------+------------+
| Table1    | Id         |
| Table1    | Name       |
| Table1    | Owner      |
| Table2    | Id         |
| Table2    | Name       |
| Table2    | True       |
+-----------+------------+

我已经很好地了解了sys架构,但我无法在sys.columnssys.tables中找到任何父引用。

2 个答案:

答案 0 :(得分:17)

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

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

select object_name(object_id),name 
from sys.columns

答案 1 :(得分:12)

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

SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = <TableName> AND TABLE_SCHEMA= <SchemaName>

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