[SQL Server] Offset ~ Fetch によるページング(Paging)

inno
2014-02-06 19:13 2696 0
[SQL Server] Offset ~ Fetch によるページング(Paging)

MS SQL SERVER 2012から追加されたOFFSET ~ FETCHを利用すると、
簡単にページング(Paging)ができます。
テストの為にSQLを準備しました。
まず、テーブルとデータを作成しましょう。

-- テーブル作成
CREATE TABLE dbo.TempPaging
(
Idx int,
StrVal varchar(10)
)
GO

-- データ登録
INSERT INTO dbo.TempPaging (Idx, StrVal)
SELECT 1, 'E' UNION ALL
SELECT 2, 'G' UNION ALL
SELECT 3, 'H' UNION ALL
SELECT 4, 'A' UNION ALL
SELECT 5, 'J' UNION ALL
SELECT 6, 'C' UNION ALL
SELECT 7, 'B' UNION ALL
SELECT 8, 'D' UNION ALL
SELECT 9, 'I' UNION ALL
SELECT 10, 'F' 
GO

では、「StrVal」カラムのデータを基準にしてページング(Paging)をしてみましょう。

-- #### ページング(Paging)テスト #### START ####
DECLARE @Page int
DECLARE @ListSize int

SET @Page = 1 -- 移動するページ番号
SET @ListSize = 20 -- ページごとに表示する件数

DECLARE @StartSn int
SET @StartSn = ((@Page-1) * @ListSize)

SELECT *
FROM dbo.TempPaging
ORDER BY StrVal ASC
OFFSET @StartSn ROWS
FETCH NEXT @ListSize ROWS ONLY
-- #### ページング(Paging)テスト #### END ####

1ページに2件ずつ表示するSQLです。
ですので、1ページ目は「A」、「B」が表示されます。
2ページ目は「C」、「D」が表示されます。
3ページ目は「E」、「F」が表示されます。

1ページでも実行時間が結構かかる場合がありますので、作成後十分なテストを行ってください。


コメント