Skip to content

OTR_ListPaging

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

一覧ページ制御方式

概要

検索結果などの一覧を、ページに分けて表示する方式。

  • 全件を取得してメモリでページングしない。 SQL でページングするのが基本。
  • 最大表示件数・最大取得件数(打ち切りの上限)は、業務要件で決めてアプリ側に設定する。

詳細

ページ制御の 3 方式

方式 概要 向き
① アプリケーション制御 主キーだけを先に取得し、表示するページの主キーで本体を再検索する DBMS に依存しない
② ストアド・プロシージャ制御 サーバ側で範囲(例:101〜200 件目)を絞って返す ロジックを DB 側に置きたいとき
③ SQL 制御 ROW_NUMBER() などで範囲を SQL に埋める 最も一般的

SQL のパターン(DBMS 別)

-- SQL Server
WITH T AS (
  SELECT *, ROW_NUMBER() OVER (ORDER BY ShipperID) AS RNUM FROM Shippers
)
SELECT * FROM T WHERE RNUM BETWEEN @FROM AND @TO
-- Oracle
SELECT * FROM (
  SELECT S.*, ROW_NUMBER() OVER (ORDER BY ShipperID) AS RNUM FROM Shippers S
) WHERE RNUM BETWEEN :FROM AND :TO
  • SQL 定義ファイルは DBMS ごとに用意する。
  • ソート列や絞り込みを可変にするなら、動的パラメタライズド・クエリを使う(ソート列は VAL タグに許可リストの値だけを渡す)。

その他

  • 総件数が要るなら、別に COUNT(*) を取る(自動生成 Dao の D5_SelCnt())。
  • 大量のデータを流すなら、ExecSelect_DR(DataReader)が ExecSelectFill_DT より速い。
  • UI のページャ(GridView の PageIndexChanging など)は表示の制御である。データの取得方式と混同しない。 UI だけでページングすると、全件を取得してしまう。

コーディング・エージェントに任せる場合

  • スキル opentouryo-app-design(references/list-paging.md)と opentouryo-query-definition を使わせる。
  • エージェントは全件取得 + LINQ の Skip / Take で済ませがちなので、SQL でページングしているかを確認する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally