从未知数量和列名称INSERT INTO临时表(来自动态PIVOT查询)

时间:2017-08-21 08:22:55

标签: sql-server database stored-procedures dynamic-sql temp-tables

我有一个动态查询,如下所示。 @ColumnNames param有多个此枢轴正在使用的列。 @ID@Apartment_ID来自插入参数。

SET @DynamicSQL = 'select id, name, address, phone, remarks, ' + **@ColumnNames** + ' 
                   from  (select b.id, name, criteria_id, impact_value, remarks  
                          from dbo.User u
                          inner join dbo.ID b on b.id = u.id
                          where b.Instance_ID = '+ **@Id**  + 
                           'and ownerID in (select * from fnSplitString(''' +   **@Apartment_ID**  + + ''',' + ''','''       + '))'              
              + ') as t  
              pivot (max(impact_value) for criteria_id in (' + **@ColumnNames**+')
              ) pivoted '

Exec sp_executesql @DynamicSQL 

将获得结果,如屏幕截图所示。从@ColumnNames得到的列(91,92,...)不固定:

image description here

我想将此动态结果集插入到临时表中以进行排序功能。

Declare @SQLstrs nvarchar(max)

IF OBJECT_ID('tempdb..#tempResult') IS NOT NULL
    DROP TABLE #tempResult  

CREATE TABLE #tempResult 
(  
     id int,
     name nvarchar(max),
     address nvarchar(max),
     phone nvarchar(max),
     Remarks nvarchar(max),
     **@ColumnNames**
)

--EXEC (@Alter_sql);

SET @SQLstrs = 'Insert into #tempResult ' + @DynamicSQL 

EXEC @SQLstrs

由于临时表需要包含固定列,如何设置无法知道要插入多少列的动态列?

1 个答案:

答案 0 :(得分:1)

尝试使用select into

 SET @SQLstrs = 'select * into #tempResult from(' + @DynamicSQL  +') as _temp'