0

当结果可以具有可变数量的列时,如何将 SP 的输出插入到表中?

此 SP 创建一个表,其中列数可能会有所不同。我需要将结果放入一个临时表中,以便我可以使用它来查询报告。如何创建可以处理 SP 输出的表?

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

 SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) 
        FROM temp_SURVEY_DATA c
        FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)') ,1,1,'')

 set @query =  'SELECT responseid, moduleid, responsedatetime, ' + @cols + ' from 
        (select question, response, responsedatetime, responseid, moduleid
            from temp_SURVEY_DATA) x
        pivot 
        ( max(response)
            for question IN(' + @cols + ') ) p '

          execute(@query)
4

1 回答 1

0

使用专门用于此类事情的静态表并将结果集插入其中,而不是将行返回给调用者:

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

 SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) 
        FROM temp_SURVEY_DATA c
        FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)') ,1,1,'');

EXECUTE ('IF OBJECT_ID(''temp_SURVEY_DATA_pivoted'') IS NOT NULL
  DROP TABLE temp_SURVEY_DATA_pivoted');

set @query =  'SELECT responseid, moduleid, responsedatetime, ' + @cols + '
  INTO temp_SURVEY_DATA_pivoted
  from 
        (select question, response, responsedatetime, responseid, moduleid
            from temp_SURVEY_DATA) x
        pivot 
        ( max(response)
            for question IN(' + @cols + ') ) p '

          execute(@query)

或者在使用动态脚本而不是在显示数据之前立即放弃动态脚本的想法。

于 2012-04-10T06:07:19.207 回答