SQL Server 2017 OFFSET + FETCH - 如何知道最后的结果

时间:2018-03-11 13:30:26

标签: c# sql sql-server sql-server-2017

我有一张包含数千个条目的表格。我正在构建一个Web应用程序(Razor C#)来显示包含该信息的表。

我有一个工作分页系统,但我无法找到一种方法来了解当前结果集是否具有最后的结果。

我想过这样做:

  • pageNumber * resultPerPage< count(all)
  • 预先做下一页并查看是否有任何结果

我需要这样做才能隐藏" next"按钮。 这是我当前的代码(我将此附加到根据过滤器集构建的查询中):

ORDER BY ID 
OFFSET ((" + page + " - 1) * " + rowsPerPage + ") ROWS
FETCH NEXT " + rowsPerPage + " ROWS ONLY

谢谢!

2 个答案:

答案 0 :(得分:1)

在请求中再获取一行,即rowsPerPage + 1。 如果返回的结果集包含rowsPerPage + 1行,那么您将知道还有更多要获取的记录。如果它返回的行数小于或等于rowsPerPage行,则不会有更多页面,因此您可以隐藏下一个按钮。 这种方法的唯一成本是每次再获得一条记录。

答案 1 :(得分:0)

跳过OFFSET子句。跟踪之前SELECT的最后一次ID。

WHERE ID > last_id_from_previous_select
ORDER BY ID
FETCH NEXT " + rowsPerPage + " ROWS ONLY