这是我的动态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子句 表达式。
答案 0 :(得分:1)
这可能不是解决方案,但如果它有帮助..
窗口函数不支持常量作为ORDER BY子句 表达式。
当您尝试在constant value
ORDER BY clause of a windowed function
时,通常会发现此错误
喜欢ROW_NUMBER() OVER(ORDER BY 'const_val')
答案 1 :(得分:1)
建议您在字符串连接中使用QUOTENAME(@sortBy),这将确保局部变量的内容有效作为列名。