SQL Server 2005错误 - “”MAX“不是可识别的表提示选项”

时间:2012-11-16 12:05:12

标签: sql tsql sql-server-2005 pivot

我正在尝试使用动态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中对非数字varchars执行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。 任何人都可以提出任何建议来解决这个问题吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

您错过了PivotDataPIVOT之间的空格。

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

结果,SQL解析器将PivotDataPIVOT解释为单个标识符,导致稍后出现语法错误。