使用SELECT结果作为列名

时间:2019-07-23 15:47:03

标签: sql-server stored-procedures

早上好,长期潜伏,第一次海报。 我正在编写一个存储过程,以从一个SELECT语句中获取结果,并使用该输出来构建另一个SELECT语句。问题是我找不到实现此目的的机制或代码。将结果分配给变量似乎不是一种选择,因为SQL不支持数组(据我所知)。

+----+-------------+-------------+
| ID | ___$seqval  | Column_Name |
+----+-------------+-------------+
| 1  | 0x000000E10 | EnvType     |
| 2  | 0x000000E10 | DataType    |
| 3  | 0x000000E10 | DateMod     |
+----+-------------+-------------+

试图到达;     选择Column_name(1),Column_name(2)..     来自tblServer_Data

总共可能返回20列。

2 个答案:

答案 0 :(得分:0)

这将为选定表中的列提供SELECT语句。

SELECT 'SELECT ' + STUFF(
(SELECT ',' + c.column_name  from
(SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS c
where c.TABLE_NAME = your_table) c
for xml path ('')),1,1,'') + ' FROM ' + your_table

答案 1 :(得分:0)

SQL DEMO

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME([Column_Name]) 
                   FROM Table1 c
                   FOR XML PATH(''), TYPE
                  ).value('.', 'NVARCHAR(MAX)') 
                 ,1,1,'')

SELECT @cols as Columns;  -- just for debug

set @query = 'SELECT [ID], ' + @cols + ' from 
            (
                select 1 as ID
                    , [seqval]
                    , [Column_Name]
                from Table1
           ) x
            pivot 
            (
                 max([seqval])
                for [Column_Name] in (' + @cols + ')
            ) p '

SELECT @query as Query;  -- just for debug    

execute(@query);

输出

enter image description here

然后您可以对该输出执行SELECT