【问题标题】:SQL Server 2005 Error - ""MAX" is not a recognized table hints option"SQL Server 2005 错误 - ""MAX" 不是可识别的表提示选项"
【发布时间】:2012-11-05 03:48:54
【问题描述】:

我正在尝试使用动态 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。 任何人都可以就如何克服这个问题提供任何建议吗?

非常感谢。

【问题讨论】:

  • 非常感谢两位回答者。发现得好。我现在已经克服了那个错误,现在我要调查一个新的错误。非常感谢。

标签: sql tsql sql-server-2005 pivot


【解决方案1】:

PivotDataPIVOT 之间缺少一个空格。

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

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

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2014-05-06
    • 2010-10-15
    相关资源
    最近更新 更多