仅显示 25 个结果,但会返回完整的结果数 sql

Display only 25 results but bring back the full count of results sql

是否可以将存储过程的结果集限制为25个结果,而且return结果总数(不限制)?此存储过程用于 Web 应用程序的搜索页面,因此我们有分页结果(每页显示 25 个结果),但需要 @@rowcount 来显示 'Your results returned ___' 个结果。

我已经尝试过像

这样显而易见的方法
SELECT COUNT(*) 
FROM [derived table containing the search query]

但由于数据结构、参与表中的行数,COUNT(*) 比查询本身花费的时间更长。

对于格式问题,我提前表示歉意,这仍然很新!

如果您不是从派生 table 查询计数,而是从原始 table 查询计数,并且只获得比派生 table 更快的计数。然后您可以将其存储在输出参数中。

除此之外,我看不到其他方法。

您可以尝试使用 WITH common_table_expression

WITH ResultSet AS
(
    select CustomerID,CompanyName, ROW_NUMBER() over (Order by CompanyName asc) as RowNumber from Customers
)
select CustomerID,CompanyName,(Select Max(RowNumber) From ResultSet) AS TotalCount from ResultSet
where RowNumber > 0 and RowNumber < 25

在这种情况下,CompanyName 将是排序字段,您可以计算 max RowNumber,然后对其应用分页。

另一种选择是

declare @pageIndex int = 1
declare @pageCount int = 25
SELECT CustomerID, CompanyName,COUNT(*) OVER () as TotalCount
FROM Customers
ORDER BY CompanyName
OFFSET ( @pageIndex-1 ) * @pageCount ROWS
FETCH NEXT @pageCount ROWS ONLY

Demo

所以为什么不这样做:

declare @numrows int;
SELECT @numrows = Count(*) FROM sys.databases;
PRINT @numrows; -- or assign to output param