窗口函数不支持常量作为SQL Server TempTable中的ORDER BY子句表达式

时间:2015-08-05 04:21:29

标签: sql sql-server-2008 sql-order-by window-functions row-number

这是我的动态SQL查询:

SET @SQL = 'SELECT * FROM 
                (SELECT *, ROW_NUMBER() OVER(ORDER BY '+ @sortBy +') AS rowNumber FROM #temp) A 
            WHERE A.rowNumber BETWEEN ' + CONVERT(varchar(9),
(@startIndex -1) * @PageSize + 1) + ' AND ' + CONVERT(varchar(9), 
(((@startIndex -1) * @PageSize + 1) + @PageSize) - 1)+''

print(@SQL)
exec(@SQL)

这是PRINT命令的输出:

SELECT * 
FROM
   (SELECT *, ROW_NUMBER() OVER(ORDER BY Typename) AS rowNumber       
    FROM #temp) A 
WHERE A.rowNumber BETWEEN 1 AND 5 

其中Typename@sortBy参数值。

但是我收到了这个错误:

  

窗口函数不支持常量作为ORDER BY子句   表达式。

2 个答案:

答案 0 :(得分:1)

这可能不是解决方案,但如果它有帮助..

  

窗口函数不支持常量作为ORDER BY子句   表达式。

当您尝试在constant value

中设置ORDER BY clause of a windowed function时,通常会发现此错误

喜欢ROW_NUMBER() OVER(ORDER BY 'const_val')

答案 1 :(得分:1)

建议您在字符串连接中使用QUOTENAME(@sortBy),这将确保局部变量的内容有效作为列名。