使用SQL Server。
我有一个非常广泛的查询,有很多别名等...
有没有办法,只使用SQL(存储过程很好,但不是PHP等),从这个查询中获取所有列名的列表? (我意识到我可能必须将我的查询嵌入到此解决方案中,但这很好。只是一个临时措施。)
谢谢!
答案 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) ;
答案 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'