目标很简单:获取总行数和一些数据页。
当我使用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;
答案 0 :(得分:1)
我认为答案是“不”。您将总行数附加到返回的每一行。查询没有返回任何行,因此无法放置总数。
顺便说一下,我的确想象total
正在计算中。但没有任何行,你永远不会看到它。
编辑:
我能想到的唯一解决方法是在应用层。如果没有返回任何行,则运行:
SELECT Total = COUNT(*) OVER()
FROM Table1;
你可以先运行它来获得总数。缺点是表格真的不是表格,而是运行成本高昂的视图。