是否可以将存储过程的结果集限制为25个结果,还可以返回结果总数(不限)?此存储过程用于Web应用程序的搜索页面,因此我们有分页结果(每页显示25个结果),但需要@@rowcount
显示“您的结果返回___”结果。
我尝试过类似的明显方法
SELECT COUNT(*)
FROM [derived table containing the search query]
但是由于数据结构,参与表中的行数,COUNT(*)
比查询本身花费的时间更长。
我提前为那里的格式化程序道歉,对此仍然很新!
你可以尝试使用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
如果您不是从派生表中查询Count,而是从原始表中查询,并且只获得应该比派生表更快的计数。然后,您可以将其存储在输出参数中。
除此之外,我没有看到另一种方法来做到这一点。
所以为什么不这样做:
declare @numrows int;
SELECT @numrows = Count(*) FROM sys.databases;
PRINT @numrows; -- or assign to output param