2011-06-22 47 views
2

我使用存储的proc在大记录集上分页服务器端 存储的proc有一个相当复杂的where子句。SQL分页返回分页之前的记录总数

我还需要分页之前的记录总量才能在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) 

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

另一种方法是创建一个临时表内查询, 再算上记录并返回临时表,但它并不像做这件事的好办法...

我喜欢返回记录总数作为存储过程的输出参数

有什么想法?

回答

4

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

+1

真的吗?您必须在该网站上创建一个帐户才能阅读文章?我很想下决心,但是,这可能是不公平的,因为我没有真正阅读过这篇文章。 – Jonathan

+0

@Jonathan,试试这个:[bugmenot] – oluckyman

+0

@oluckyman - 谢谢。据我记得,SSC曾经允许你解散唠叨屏幕并阅读文章。看起来他们已经改变了这一政策,但我仍然无能为力。我无法在这里重现这篇文章。 –