2

動的SQLを使用して、列名を動的に生成する必要があるテーブルでピボットを実行しようとしています。私のコードは次のとおりです。

DECLARE @columns varchar(max)
DECLARE @query varchar(max)
SELECT @columns = COALESCE(@columns + ',[' + cast([Name] as varchar(max)) + ']', 
                 '[' + cast([Name] as varchar(max))+ ']')           
    FROM   dbo.Temp2

SET @query = 'SELECT * FROM dbo.Temp2 AS PivotData'
SET @query = @query  + 
'PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p'                              

EXEC (@query)

私の@columns関数は機能しているようです(検証するために8000文字しか「印刷」できませんが)。SQL2005では数値以外のvarcharに対してMAXまたはMIN関数を実行しても問題ないことを読みましたが、完全な形式でクエリを実行すると、エラーメッセージが表示されます。

Msg 321, Level 15, State 1, Line 1
"MAX" is not a recognized table hints option. If it is intended as a parameter to a table-valued function, ensure that your database compatibility mode is set to 90.

互換性レベルを確認しましたが、90に設定されています。これを乗り越える方法について誰かが提案できますか?

よろしくお願いします。

4

1 に答える 1

2

PivotDataとの間のスペースがありませんPIVOT

    SET @query = @query  + 
    ' PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p' 
//   ^--- HERE

その結果、SQLパーサーPivotDataPIVOTは単一の識別子として解釈し、後で構文エラーが発生します。

于 2012-11-16T12:07:08.710 に答える