sql - 使用 OFFSET FETCH 计算 Sql 选择计数
问题描述
我正在尝试在 OFFSET FETCH 之前计算 select 中的行数。但据我所知,没有办法在选择中获取查询的总行数。这就是为什么您必须复制整个 Select 以在获取偏移量之前仅计算行数。这是一种通常的做法,还是存在一些更好的方法?我有一个查询:
SELECT *
FROM Table1
INNER JOIN Table2 ON Table2.Id = Table1.Table2Id
INNER JOIN Table3 ON Table3.Id = Table1.Table3Id
INNER JOIN Table4 on Table4.Id = Table1.Table4Id
WHERE [Table1].Amount >= @Count
OFFSET (@PageNumber - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
但是随着查询的增长,将会有更多的重复,并且如果发生任何更改,所有开发人员都必须记住更改这两个查询,这对我来说很奇怪。目前我正在对计数和另一个获取行进行单独的查询。
SELECT Count(*)
FROM Table1
INNER JOIN Table2 ON Table2.Id = Table1.Table2Id
INNER JOIN Table3 ON Table3.Id = Table1.Table3Id
INNER JOIN Table4 on Table4.Id = Table1.Table4Id
WHERE [Table1].Amount >= @Count
SELECT *
FROM Table1
INNER JOIN Table2 ON Table2.Id = Table1.Table2Id
INNER JOIN Table3 ON Table3.Id = Table1.Table3Id
INNER JOIN Table4 on Table4.Id = Table1.Table4Id
WHERE [Table1].Amount >= @Count
OFFSET (@PageNumber - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
你们怎么解决的?
解决方案
您可能还想@@ROWCOUNT
在运行原始查询后查看 SQL Server 中的全局变量以查看返回了多少行:
SELECT @@ROWCOUNT
UPDATE
这在您运行/时也很有帮助INSERT
。
有关详细信息,请参阅Microsoft 文档。
推荐阅读
- matlab - MATLAB:用 NaN 替换元胞数组中的列
- javascript - SAPUI5 保留多行的预选?
- c# - 在网页范围内提取文本
- java - 通过蓝牙连接后立即发送/接收数据 - Android
- wordpress - 使用来自 woocommerce 字段的 billing_company 作为用户名
- php - 在多数组上使用 array_chunk
- c++ - 无法将焦点设置到 CEdit 控件
- docker - 从主机与 docker 内的服务通信,而不使用它的 IP
- javascript - 此程序中的 for 循环未按预期工作
- c# - 如何将`linq`的结果返回到DataTable?