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 に答える