仅显示 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
所以为什么不这样做:
declare @numrows int;
SELECT @numrows = Count(*) FROM sys.databases;
PRINT @numrows; -- or assign to output param
是否可以将存储过程的结果集限制为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
所以为什么不这样做:
declare @numrows int;
SELECT @numrows = Count(*) FROM sys.databases;
PRINT @numrows; -- or assign to output param