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

问题描述 投票:0回答:3

是否可以将存储过程的结果集限制为25个结果,还可以返回结果总数(不限)?此存储过程用于Web应用程序的搜索页面,因此我们有分页结果(每页显示25个结果),但需要@@rowcount显示“您的结果返回___”结果。

我尝试过类似的明显方法

SELECT COUNT(*) 
FROM [derived table containing the search query]

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

我提前为那里的格式化程序道歉,对此仍然很新!

sql-server stored-procedures ssms resultset rowcount
3个回答
1
投票

你可以尝试使用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


0
投票

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

除此之外,我没有看到另一种方法来做到这一点。


0
投票

所以为什么不这样做:

declare @numrows int;
SELECT @numrows = Count(*) FROM sys.databases;
PRINT @numrows; -- or assign to output param
© www.soinside.com 2019 - 2024. All rights reserved.