2

目標は簡単です: 合計行数といくつかのデータ ページを取得します。

OFFSET...FETCH アプローチを使用して総行カウントでページングを実装すると、次の問題が発生します大きなページ番号を渡すと(たとえば、100 行しかないのに、1 ページあたり 10 レコードで 15 番目を要求した場合) COUNT(*)結果セットが空であるため、OVER() ステートメントが呼び出されていません。したがって、この場合、正しい合計行数を取得できません。

大きなページ番号が渡された場合でも、OFFSET ... FETCHアプローチを使用して正しい合計行数を取得する方法はありますか?

参考までに、OFFSET ... FETCHアプローチは次のとおりです。

SELECT 
  ...
  Total = COUNT(*) OVER()
FROM Table1
ORDER BY Col1
  OFFSET (@PageNum-1) * @PageSize ROWS
  FETCH NEXT @PageSize ROWS ONLY;
4

1 に答える 1

3

答えは「いいえ」だと思います。返される各行に合計行数を追加しています。クエリは行を返さないため、合計を入れる場所がありません。

ちなみに、total計算されていると思います。しかし、行がなければ、それを見ることはありません。

編集:

私が考えることができる唯一の回避策は、アプリケーション層にあります。行が返されない場合は、次を実行します。

SELECT Total = COUNT(*) OVER()
FROM Table1;

実際にこれを最初に実行して、合計を取得できます。欠点は、テーブルが実際にはテーブルではなく、実行にコストがかかるビューである場合です。

于 2013-08-12T10:56:25.067 に答える