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

如何在SQL Server中从查询中获取列名,sql,sql-server,alias,Sql,Sql Server,Alias,使用SQL Server 我有一个非常广泛的查询,有很多别名等等 是否有一种方法,只使用SQL(存储过程可以,但不使用PHP等)从该查询中获取所有列名的列表?(我意识到我可能需要将我的查询嵌入到这个解决方案中,但这很好。这只是一个临时措施。) 谢谢 这条评论太长了 有多种方法可以从查询中获取列,例如: select top 0 s.* from (<your query here>) s; 这种方法的优点是,可以获得类型信息和列名。但是引擎仍然必须运行查询,这可能需要时间,即使没有

使用SQL Server

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

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


谢谢

这条评论太长了

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

select top 0 s.*
from (<your query here>) s;
这种方法的优点是,可以获得类型信息和列名。但是引擎仍然必须运行查询,这可能需要时间,即使没有返回任何行。虽然列名和类型在编译后可用,但我不知道如何在不执行查询的情况下获取它们。

SQL Server 2008之后

select * 
from sys.columns c 
inner join sys.objects o on c.object_id = o.object_id 
where o.name = 'TableName'
以前

select * 
from syscolumns c 
inner join sysobjects o on c.id = o.id 
where o.name = 'TableName'

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


INFORMATION\u SCHEMA.COLUMNS如果需要基表的列。除非运行动态sql,否则结果集中的列列表必须是静态的。为什么不在设计时获取它们呢?对于Microsoft SQL。您是在说什么样的SQL?您的第一个答案返回的列列表没有数据,但我认为OP需要一行中的列名列表作为结果集。@Kaf我认为从该查询中获取所有列名的列表不需要一行。如果是这样的话,在任何情况下都不难添加,请参见@ConradFrix:为我的错误道歉。我的意思是,
OP在单个列中期望列名
而不是
在单个行中
。这里快五点半了(@Kaf我明白了。那就是
从信息模式中选择列名称。列…
@不相关问题中没有任何东西向我表明结果应该连接起来,所以你的评论让我困惑。效果很好。
select * 
from sys.columns c 
inner join sys.objects o on c.object_id = o.object_id 
where o.name = 'TableName'
select * 
from syscolumns c 
inner join sysobjects o on c.id = o.id 
where o.name = 'TableName'
SELECT name 
FROM 
sys.dm_exec_describe_first_result_set
('Your Query Here', NULL, 0) ;