如何从SQL Server中的查询中获取列名

Web*_*uy2 8 sql sql-server alias

使用SQL Server.

我有一个非常广泛的查询,有很多别名等...

有没有办法,只使用SQL(存储过程很好,但不是PHP等),从这个查询中获取所有列名的列表?(我意识到我可能必须将我的查询嵌入到此解决方案中,但这很好.只是一个临时措施.)

谢谢!

Con*_*rix 13

如果您使用的是SQL Server 2012或更高版本,则可以利用sys.dm_exec_describe_first_result_set

SELECT name 
FROM 
sys.dm_exec_describe_first_result_set
('Your Query Here', NULL, 0) ;
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 这是钱。通读了一篇关于如何使用 postgres 执行此操作的完整博客文章,但这个 sql 技巧绝对有魅力。只需将您的查询放在“您的查询在这里”引号内即可;瞧;查询结果中的列名显示在表中。美丽的 (2认同)

Gor*_*off 6

这个评论太长了.

有多种方法可以从查询中获取,例如:

select top 0 s.*
from (<your query here>) s;
Run Code Online (Sandbox Code Playgroud)

然后你可以解析结果.

但是,我发现另一种方法很有用.使用相同的逻辑创建视图或表:

select top 0 s.*
into _TempTableForColumns
from (<your query here>) s;
Run Code Online (Sandbox Code Playgroud)

然后使用information_schema(或者如果您愿意,使用系统表):

select *
from information_schema.columns
where table_name = '_TempTableForColumns' and schema_name = 'dbo';

drop table _TempTableForColumns;
Run Code Online (Sandbox Code Playgroud)

此方法的优点是您可以获取类型信息以及列名称.但是引擎仍然必须运行查询,即使没有返回任何行,也可能需要时间.尽管在编译之后列名称和类型可用,但我不知道如何在不执行查询的情况下获取它们.