Sql server - 处理新数据?

时间:2013-09-11 07:22:28

标签: sql-server sql-server-2008-r2

摇滚乐队目前有100首歌曲:

select count(songName) from bands where name='Beatles'

结果:1​​00。

我通过分页在我的应用中显示这些歌曲(每次--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”的新歌

所以现在,将会出现不匹配,因为在顶部插入了一个新行(并推送下面的所有行)。

我不想把所有的行都放到我的应用程序中。

获得第一个标准结果的正确方法/(功能?)是什么?

我可以使用临时表,但它只适用于当前连接。 (每次用户在分页时按“下一步” - 这是一个新会话。)

1 个答案:

答案 0 :(得分:1)

这是分页中的常见问题,无论是否适应正在移动的数据。通常,您的用户不会注意或关注在分页期间记录总数的变化,或者由于添加了新记录,第2页底部的记录突然位于第3页的顶部。但是,如果你真的需要一致性,那么如果数据集足够小,你可以在临时表或你的应用程序内存中缓存整个PK列表,然后在获取时加入到它。

- &GT; What is the best way to paginate results in SQL Server