我正在尝试在SQL SERVER中进行分页,我在OFFSET和ROWS上遇到两个错误
CREATE PROCEDURE XYZ
@offset int,
@limit int,
@order char(4),
@Id int
AS
BEGIN
SELECT * FROM TABLE
WHERE ID = @id
ORDER BY
CASE WHEN @order = 'desc' THEN [TIME] END DESC,
CASE WHEN @order = 'asc' THEN [TIME] END ASC
*OFFSET* @offset FETCH ROWS NEXT @limit *ROWS* ONLY
END
GO
OFFSET
上的错误:
OFFSET'附近的语法不正确。
ROWS
(第二个)错误:
' ROWS'附近的语法错误。期待来自。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
那么,在SQL Server 2008中,您显然无法使用2012年引入的fetch...next
子句。
但是,这并不意味着您无法进行分页
一种简单的方法是使用带有row_number的cte:
;WITH CTE AS
(
SELECT *, -- Don't be lazy, specify the Columns list...
ROW_NUMBER() OVER
(
ORDER BY
CASE WHEN @order = 'desc' THEN [TIME] END DESC,
CASE WHEN @order = 'asc' THEN [TIME] END ASC
) As rn
FROM TABLE
WHERE ID = @id
)
SELECT * -- Don't be lazy, specify the Columns list...
FROM CTE
WHERE rn >= @offset
AND rn <= @offset + @limit