我使用存储过程在大记录集上对服务器端进行分页 存储过程有一个非常复杂的where子句。
我还需要分页前的总记录数才能在UI上可视化该数字。
这样做的最佳方式是什么?
我正在做的那一刻
ALTER PROCEDURE [Schema].[ReturnRecords]
@PageSize int = 20,
@StartIndex int = 0
AS
SELECT * FROM
(
SELECT *, TOP(COUNT(e._ROWID) OVER ())
FROM TABLE_NAME
WHERE Column=1 AND Column1=2 AND Column2=2 AND Column3=2 AND Column4=2
) AS X
WHERE X.RowNum BETWEEN @StartIndex AND (@StartIndex + @PageSize)
所以我记录的最后一列包含分页前的记录总数。
另一种方法是使用内部查询创建临时表, 然后计算记录并返回临时表,但它看起来不是一个好方法...
我希望将记录总数作为存储过程的输出参数
任何想法?
答案 0 :(得分:4)
进行第二次查询以获得计数通常可以证明是一种更有效的策略。查看一些performance comparisons of various approaches here。