SQL Server 2008 以降ではOFFSET FETCH句を利用すると簡単に結果レコードセットの指定した位置から指定した個数のレコードを取り出せます。
ORDER BY 句にオプションの形で記述します。
ROWSはROWと書いても同じ動作になります。また、FETCH NEXT はFETCH FIRSTと記述しても同じ動作になります。
ORDER BY order_by_expression [ COLLATE collation_name ] [ ASC | DESC ] [ ,...n ] [ <offset_fetch> ]<offset_fetch> ::={ OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } [ FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY ]}
以下のSQLはContentsテーブルをregisterdateで逆順にソートし、40件目から10件レコードを取り出すます。
SELECT * FROM contents ORDER BY registerdate DESC OFFSET 40 ROWS FETCH NEXT 10 ROWS ONLY
以下のSQLはtagテーブルをnameでソートし、100件目から20件レコードを取り出すます。
SELECT * FROM tag ORDER BY name OFFSET 100 ROWS FETCH NEXT 20 ROWS ONLY
SQL Server 2008以前の方法と比較すると非常にシンプルなSQLで実行できます。