sql - 带有 OFFSET 的总行数 .. FETCH 问题

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

当我使用 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;

最佳答案

我认为答案是否定的。您将总行数附加到要返回的每一行。查询未返回任何行,因此没有地方放置总数。

顺便说一下,我确实认为正在计算total。但如果没有任何行,您将永远看不到它。

编辑:

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

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

您实际上可以先运行此程序以获得总数。缺点是当表实际上不是表而是运行成本高昂的 View 时。

https://stackoverflow.com/questions/18184945/

相关文章:

git - 如何搜索 git 历史(镐),但不包括重命名

c# - 如何获取任何文件/文件夹的系统图标

ruby-on-rails - "heroku logs"给我 "Not found"

uiview - UIView 标签属性的最大值

canvas - 如何调试 CORS 错误

hadoop - 以 hdfs 作为接收器的水槽中的 NoSuchMethod 错误

.net - 定期 - 无法将索引 Y 处的 Unicode 字符 X 转换为指定的代码页

Magento - 如何为处理订单启用取消按钮(已创建发票)

asp.net-mvc-4 - 使用 ADFS 登录创建角色成员资格

bash - 使用 sendmail 强制内容类型