BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Porada: Stronicowanie wyników wyszukiwania w SQL Server 2012

26-04-2012 08:00 | Michał Derendarz
Artykuł opisuje jak z pomocą ulepszonej składni w SQL Server 2012 rozwiązać problem stronicowania wyników wyszukiwania.

Stronicowanie wyników wyszukiwania jest jednym z najczęściej spotykanych zadań, z jakimi musi uporać się każdy developer rozwiązań bazodanowych.

Istnieje wiele sposobów podejścia do problemu, jednakże wraz z platformą SQL Server rozwiązanie jest prostsze i szybsze, niż kiedykolwiek.

Po standardowym zapytaniu postaci SELECT … FROM … [WHERE …] wystarczy jedynie umieścić klauzulę

ORDER BY [pole, [typ sortowania], …]  

OFFSET X ROWS

FETCH NEXT Y ROWS ONLY.

X oznacza przesunięcie, tj. numer rekordu, od którego zaczynają być zliczane kolejne rekordy(wiersz o numerze X nie wchodzi do wyników wyszukiwania). X musi liczbą całkowitą większą niż zero.

Y oznacza liczbę rekordów, jakie mają zostać wczytane od rekordu X. Y musi być liczbą całkowitą dodatnią.

Zamiast słowa NEXT można zamiennie użyć słowa FIRST. 

 

Najlepiej widać to na przykładzie.

Przykładowa tabela Uzytkownicy zawiera około tysiąca rekordów. Każdy rekord składa się z pól Login oraz Punkty.

Poniżej pokazany jest fragment wyników (rekordy o numerach porządkowych od 48 do 60) wyszukiwania loginów i punktów zdobytych przez posiadaczy danych loginów. Wyniki są posortowane alfabetycznie wg loginów. Do wyszukiwania posłużono się następującym zapytaniem:

SELECT Login, Punkty

FROM [dbo].[Uzytkownicy]

ORDER BY Login ASC;

 

 

Załóżmy, że użytkownik chce odczytać rekordy od 51 do 55. By szybko wprowadzić taką możliwość w wyszukiwaniu, wystarczy że do poprzedniego zapytania po klauzuli ORDER BY zostanie dodany następujący fragment:

OFFSET 50 ROWS

FETCH NEXT 5 ROWS ONLY;

Finalne zapytanie powinno zatem mieć następującą postać:

SELECT Login, Punkty

FROM [dbo].[Uzytkownicy]

ORDER BY Login ASC

OFFSET 50 ROWS

FETCH NEXT 5 ROWS ONLY;

Wyniki powyższego zapytania przedstawiono na poniższym rysunku.

Widać więc, że klauzula

OFFSET X ROWS

FETCH NEXT Y ROWS ONLY

 jest bardzo pomocna przy rozwiązywaniu stronicowania wyników lub zwracaniu wyników o określonym numerze porządkowym. Pozwala znacznie skrócić oraz uprościć sposób pisania zapytania.

Komentarze 0

pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.