OFFSET FETCH时出错| SQL SERVER

时间:2017-09-05 08:36:23

标签: sql-server tsql pagination

我正在尝试在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'附近的语法错误。期待来自。

有人可以帮我解决这个问题吗?

1 个答案:

答案 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