如何从SQL Server

时间:2015-07-08 16:05:55

标签: sql sql-server alias

使用SQL Server。

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

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

谢谢!

3 个答案:

答案 0 :(得分:12)

如果您使用的是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) ;

DEMO

答案 1 :(得分:6)

评论太长了。

您可以通过多种方式从查询中获取,例如:

select top 0 s.*
from (<your query here>) s;

然后你可以解析结果。

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

select top 0 s.*
into _TempTableForColumns
from (<your query here>) s;

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

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

drop table _TempTableForColumns;

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

答案 2 :(得分:0)

在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'