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

Sun*_*n S 6 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 
Run Code Online (Sandbox Code Playgroud)

Ed *_*per 4

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

 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 
Run Code Online (Sandbox Code Playgroud)