SQL Server 2012からページング処理のクエリがシンプルに! ORDER BY句でOFFSETとFETCH NEXTを指定して実現

データベースから表示する件数だけを抽出するページング処理のときのクエリがシンプルに書けるようになりました。

ページング処理は、多量にあるデータの特定の件数だけを表示するために、select文で何件から何件までと指定する処理です。この処理を入れることで、データを一覧で見る画面などで、ページング処理を実装できます。

データベースレベルのページングをSQL Serverで実現する

例えば、1ページあたり20件のデータが表示されるWebサービスの画面で、3ページ目を表示する場合、次のようなクエリを書く必要がありました。

select * from (
	select *, ROW_NUMBER() over (order by Column1) rownum from Table1
) t
where rownum between 41 and 60

これはSQL Server 2008 R2までの場合です。サブクエリを使って、ROW_NUMBERで行番号を付与してから、その行番号で41行目から60行目と指定する必要がありました。

ところが、SQL Server 2012以降では、次のように書くことができます。

select * from Table1
order by Column1
offset 40 rows
fetch next 20 rows only

サブクエリはなくなり、order byの後ろにoffsetと書いて読み飛ばす行数を指定します。さらにfetch nextと書いて取得する行数を書いてあげるとページング処理が実装できます。

とても、シンプルなクエリになりました。

Follow me!

Feedlyで新着記事をチェックしよう!

Feedlyでフォローしておけば、新着記事をチェックすることができます。ぜひ、この機会にFeedlyに追加しておきましょう。