2

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

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

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

仅供参考,OFFSET ... FETCH 方法是:

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

1 回答 1

3

我认为答案是“不”。您将总行数附加到要返回的每一行上。该查询没有返回任何行,因此没有地方可以放置总数。

顺便说一句,我确实认为total正在计算中。但是没有任何行,你永远看不到它。

编辑:

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

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

你实际上可以先运行它来获得总数。缺点是表实际上不是表,而是运行起来很昂贵的视图。

于 2013-08-12T10:56:25.067 回答