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 に答える