SQL Paging
Van egy alapszabály a lekrédezéseknél, amit nagyon sokan – leginkább az üzleti felhasználók – elfelejtenek, mégpedig az, hogy csakis annyi adatot jelenítsünk meg, amennyire tényleg szükség van és kezelhető mennyiség. Ez valamikor 1 sor, de előfordulhat, hogy több száz sorról van szó. Ez utóbbit egy weboldalon megjeleníteni nem egy jó ötlet, lassú lehet az oldal betöltése; itt jön képbe a paging, lapozás.
Képzeljük el, hogy van egy weboldal, amin egy GridView-ban szeretnénk megjeleníteni sok-sok sort és oszlopot. A cél az, hogy a sorok száma egy oldalon a web fejlesztő által állítható legyen és meg tudja adni az oldal számát is. Az alábbi kód egy minta a lapozás megvalósításához:
1USE [tempdb];
2GO
3
4--teszt tábla létrehozása, aminek az adatait fogjuk "lapozni"
5CREATE TABLE [dbo].[PagingTestTable]
6(
7 [id] int identity,
8 [name] varchar(10)
9);
10GO
11
12--feltöltjük adattal a teszt táblát
13DECLARE @i int;
14SET @i = 0;
15
16WHILE @i < 1000
17 BEGIN
18 INSERT INTO [dbo].[PagingTestTable] ([name]) VALUES ('row' + CAST(@i AS varchar(4)));
19 --SQL 2008+
20 SET @i += 1;
21 --SQL 2005
22 --SET @i = @i + 1;
23 END;
24GO
25
26--példa: 10 sor egy oldalon és a 2. oldalt akarjuk látni
27DECLARE @Page int;
28DECLARE @PageSize int;
29
30SET @Page = 2;
31SET @PageSize = 10;
32
33
34;WITH CTE AS
35(
36 SELECT
37 ROW_NUMBER() OVER (ORDER BY [ID] ASC) AS [Row],
38 [name]
39 FROM
40 [dbo].[PagingTestTable]
41)
42SELECT * FROM CTE
43WHERE
44 [Row] BETWEEN (@Page * @PageSize) - @PageSize + 1 AND (@Page * @PageSize);
A kód SQL 2005 és újabb verziókon működik. A Denali-ban – ami már az SQL Server 2012 nevet viseli – az OFFSET parancs is használható.