在分页期间获取SQL Server中记录总数的有效方法

时间:2010-10-24 10:07:03

标签: sql sql-server

在sql server中查询表时,我试图只获取当前记录页面。但是,我需要为特定查询返回的记录总数,以计算页数。如何有效地执行此操作而无需编写其他查询来计算记录。

 WITH allentities 
         AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
                    rowid 
                    ,empid
                    ,lastname 
                    ,firstname
                     ,d.depname 

             FROM   emp e join dep d on e.depid=d.depid) 
    SELECT * 
    FROM   allentities 
    WHERE  rowid >= @pageid 
           AND rowid <= @pageid + 20 

2 个答案:

答案 0 :(得分:4)

如果您添加第二个ROW_NUMBER()排序DESC而不是ASC,则可以通过将两个行计数相加并减去一个来计算记录总数。 rsult集中的任何行都将具有正确的总行数:

 WITH allentities 
         AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
                    rowid 
                    ,empid
                    ,lastname 
                    ,firstname
                    ,d.depname 
                    ,ROW_NUMBER() OVER (ORDER BY se.entityid DESC) AS rowIdNeg
             FROM   emp e join dep d on e.depid=d.depid) 
    SELECT * 
            ,rowid + rowIdNeg - 1 as totalRecords
    FROM   allentities 
    WHERE  rowid >= @pageid 
           AND rowid <= @pageid + 20 

答案 1 :(得分:0)

如果您的应用程序允许,您可以尝试安装并使用搜索索引来执行此类查询。搜索索引具有与分页一起使用的功能。

您可以使用例如http://lucene.apache.org/solr/。它可以配置为索引Sql server db。