在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
答案 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。