首页 > 解决方案 > 使用 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

你们怎么解决的?

标签: sqlsql-server

解决方案


您可能还想@@ROWCOUNT在运行原始查询后查看 SQL Server 中的全局变量以查看返回了多少行:

SELECT @@ROWCOUNT 

UPDATE这在您运行/时也很有帮助INSERT

有关详细信息,请参阅Microsoft 文档


推荐阅读