摇滚乐队目前有100首歌曲:
select count(songName) from bands where name='Beatles'
结果:100。
我通过分页在我的应用中显示这些歌曲(每次--10个结果)
像这样:(SP)如何获取相关页面及其行?
declare @pageItems int=10
declare @pagenum int=1
select * from (
SELECT [id] , row_number() over ( order by songName) as n
FROM Bands where name='Beatles'
) a
where a.n > (@pagenum-1)*@pageItems and a.n<= (@pagenum)*@pageItems
但是存在问题。
假设用户位于page 3
。
披头士出版了一首名为“aaa”的新歌
所以现在,将会出现不匹配,因为在顶部插入了一个新行(并推送下面的所有行)。
我不想把所有的行都放到我的应用程序中。
获得第一个标准结果的正确方法/(功能?)是什么?
我可以使用临时表,但它只适用于当前连接。 (每次用户在分页时按“下一步” - 这是一个新会话。)
答案 0 :(得分:1)
这是分页中的常见问题,无论是否适应正在移动的数据。通常,您的用户不会注意或关注在分页期间记录总数的变化,或者由于添加了新记录,第2页底部的记录突然位于第3页的顶部。但是,如果你真的需要一致性,那么如果数据集足够小,你可以在临时表或你的应用程序内存中缓存整个PK列表,然后在获取时加入到它。
- &GT; What is the best way to paginate results in SQL Server