使用OFFSET .. FETCH时的总行数问题

3
目标很简单:获取总行数和某些数据页。
当我使用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个回答

3
我认为答案是“否”。你正在将总行数添加到返回的每一行中。查询没有返回任何行,因此没有地方放置总数。
顺便说一下,我确实想象出了计算total的方法。但是没有任何行,所以你永远不会看到它。
编辑:
我能想到的唯一解决办法是在应用程序层面上进行处理。如果没有返回任何行,则运行:
SELECT Total = COUNT(*) OVER()
FROM Table1;

你可以先运行这个代码来得到总数。不过如果这个表格其实是一个昂贵的视图,这样做就有点浪费了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接