2015-09-12 3 views
3

Как можно получить заголовки столбцов запроса выбора как один столбец в SQL Server? (Предпочтительно, чтобы получить тип данных столбцов) примерКак получить заголовки столбцов для выбранного запроса?

запросов:

select a.PartId, a.PartName, b.GroupName 
from Parts as a 
inner join Groups as b on a.GroupRef = b.GroupId 

Ожидаемый результат:

Columns 
-------- 
PartId 
PartName 
GroupName 

ответ

2

Одним из способов является создание временной таблицы со схемой результирующем, а затем query table tempdb, чтобы получить имена столбцов и данные. Вы можете получить все необходимые сведения.

select a.PartId , a.PartName , b.GroupName into #yourtable 
    from Parts as a inner join Groups as b 
    on a.GroupRef = b.GroupId 
    where 1=2 

    SELECT c.name as columnname,t.name as datatype 
    FROM tempdb.sys.columns c 
      inner join tempdb.sys.systypes as t on t.xtype = c.system_type_id 
    WHERE [object_id] = OBJECT_ID(N'tempdb..#yourtable'); 
+0

, не думаете ли вы, ваш ответ нужно 'немного больше description' ??? –

+0

@ пользователь3540365: добавлен! :) – DarkKnight

+0

можно ли создать функцию для этой цели? – Behnam

1
SELECT 'PartId', 'PartName', 'GroupName' 
    UNION ALL 
    select a.PartId , a.PartName , b.GroupName 
    from Parts as a inner join Groups as b 
    on a.GroupRef = b.GroupId 
+0

Это простой пример, мне нужно это решение для запросов, содержащих более 20 полей. – Behnam

+0

да ... своего рода демо, но вы всегда можете перетащить таблицы имен столбцов из проводника объектов, и он автоматически поместит для вас все имена столбцов. – ProblemSolver

+0

И тогда вы можете использовать приведенную выше логику. – ProblemSolver

3

Я знаю, что это не будет работать в SQL Server 2008 но SQL Server 2012+ вы можете использовать sys.dm_exec_describe_first_result_set, чтобы получить все метаданные о наборе результатов.

SQLFiddleDemo

DECLARE @tsql NVARCHAR(MAX) = 
    N'select a.PartId , a.PartName , b.GroupName 
from Parts as a inner join Groups as b 
on a.GroupRef = b.GroupId'; 

SELECT name AS [Columns] 
FROM sys.dm_exec_describe_first_result_set(@tsql, NULL, 1) 
+0

хорошо, вы упомянули 'Sql Server 2012 +' :) –

+1

Одна из веских причин перейти от SQL Server 2008 R2 к будущему;) – lad2025

Смежные вопросы