简体   繁体   中英

How to get column names from a query in SQL Server

Using SQL Server.

I have a very extensive query, with a lot of aliasing, etc...

Is there a way, using just SQL (stored proc is fine, but not PHP, etc), to get a list of all column names from this query? (I realize I will have to probably embed my query inside of this solution but that is fine. Just a temporary measure.)

Thanks!

If you're using SQL Server 2012 or later you can take advantage of sys.dm_exec_describe_first_result_set

SELECT name 
FROM 
sys.dm_exec_describe_first_result_set
('Your Query Here', NULL, 0) ;

DEMO

This is too long for a comment.

There are various ways that you can get the columns out of the query, such as:

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

Then you can parse the results.

However, I have found another approach useful. Create either a view or a table using the same logic:

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

Then use information_schema (or the system tables if you prefer):

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

drop table _TempTableForColumns;

The advantage of this approach is that you can get type information along with the column names. But the engine still has to run the query and that might take time even though no rows are returned. Although the column names and types are available after compiling, I am not aware of a way to get them without also executing the query.

After SQL Server 2008

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

Before

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM