SQL分页返回分页前的记录总数

时间:2011-06-22 17:06:59

标签: sql-server sql-server-2008

我使用存储过程在大记录集上对服务器端进行分页 存储过程有一个非常复杂的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)

所以我记录的最后一列包含分页前的记录总数。

另一种方法是使用内部查询创建临时表, 然后计算记录并返回临时表,但它看起来不是一个好方法...

我希望将记录总数作为存储过程的输出参数

任何想法?

1 个答案:

答案 0 :(得分:4)

进行第二次查询以获得计数通常可以证明是一种更有效的策略。查看一些performance comparisons of various approaches here