我正在尝试使用动态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个字符进行验证),并且我已经读到可以在SQL 2005中对非数字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。谁能提供任何有关超出此范围的建议?
提前谢谢了。
您PivotData和之间缺少空格PIVOT。
PivotData
PIVOT
SET @query = @query + ' PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p' // ^--- HERE
结果,SQL解析器将其解释PivotDataPIVOT为单个标识符,此后会导致语法错误。
PivotDataPIVOT