0

一个摇滚乐队目前有 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”的新歌

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

我不想将所有行都放入我的应用程序中。

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

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

4

1 回答 1

1

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

->在 SQL Server 中对结果进行分页的最佳方法是什么

于 2013-09-12T06:11:13.807 回答