Sql Server 分页

1。ROW_NUMBER方式

1     WITH Paging AS
2     (
3         SELECT *
4                , ROW_NUMBER() OVER (order by ID DESC) AS RowNumber
5         FROM [TableName]
6     ) 
7     SELECT *
8     FROM Paging
9     WHERE RowNumber > 0 AND RowNumber <= 10

 

2。OFFSET 方式

1   SELECT *
2   FROM [TableName]
3   ORDER BY ID DESC
4   OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;

 这种方式有一定的灵活性,可以使用变量传入分页参数,如:

1   ORDER BY ID DESC 
2   OFFSET ( @PageIndex - 1 ) * @PageSize ROWS
3   FETCH NEXT  @PageSize ROWS ONLY

以下是OFFSET的官方解释:(参考地址:https://msdn.microsoft.com/zh-cn/magazine/gg699618(SQL.110).aspx)

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }

指定在从查询表达式中开始返回行之前,将跳过的行数。OFFSET 子句的参数可以是大于或等于零的整数或表达式。ROW 和 ROWS 可以互换使用。

FETCH { FIRST|NEXT } <行计数表达式> { ROW|ROWS } ONLY

指定在处理 OFFSET 子句后,将返回的行数。FETCH 子句的参数可以是大于或等于 1 的整数或表达式。ROW 和 ROWS 可以互换使用。同样,FIRST 和 NEXT 可以互换使用。

  • ORDER BY 是使用 OFFSET 和 FETCH 子句所必需的。

  • OFFSET 子句必须与 FETCH 一起使用。永远不能使用 ORDER BY … FETCH。

  • TOP 不能在同一个查询表达式中与 OFFSET 和 FETCH 一起使用。

  • OFFSET/FETCH 行计数表达式可以是将返回整数值的任何算术、常量或参数表达式。该行计数表达式不支持标量子查询。

原文地址:https://www.cnblogs.com/hzz521/p/4485353.html