OFFSET .. FETCH问题的总行数

时间:2013-08-12 10:40:56

标签: sql fetch offset data-paging

目标很简单:获取总行数和一些数据页。

当我使用OFFSET ... FETCH方法实现总行计数的分页 我遇到以下问题 当我们通过一些大的页码 (例如,我们只有100行,但每页请求15行,每页10条记录)COUNT(*)OVER()语句从未调用过,因为结果集为空。因此, 在这种情况下我们无法获得正确的总行数

即使大页码通过,有没有办法使用OFFSET ... FETCH方法获得正确的总行数?

FYI,OFFSET ...... FETCH方法是:

SELECT 
  ...
  Total = COUNT(*) OVER()
FROM Table1
ORDER BY Col1
  OFFSET (@PageNum-1) * @PageSize ROWS
  FETCH NEXT @PageSize ROWS ONLY;

1 个答案:

答案 0 :(得分:1)

我认为答案是“不”。您将总行数附加到返回的每一行。查询没有返回任何行,因此无法放置总数。

顺便说一下,我的确想象total正在计算中。但没有任何行,你永远不会看到它。

编辑:

我能想到的唯一解决方法是在应用层。如果没有返回任何行,则运行:

SELECT Total = COUNT(*) OVER()
FROM Table1;

你可以先运行它来获得总数。缺点是表格真的不是表格,而是运行成本高昂的视图。