MC, 22:30 piątek, 31.08.2012 r.
Ilustracja do artykułu: SQL Server (T-SQL) - Limitowanie pobieranych wierszy danych

SQL Server (T-SQL) - Limitowanie pobieranych wierszy danych

MS SQL Server niestety nie posiada domyślnie zaimplementowanej dyrektywy LIMIT znanej np. z MySQL-a. Jeżeli jednak, ktoś koniecznie potrzebuje wybierać zakres pobieranych rekordów z bazy, po stronie serwera SQL, na przykład na potrzeby paginacji, to w tym artykule znajdzie receptę na to zagadnienie.

Jak wykonać operację podobną do LIMIT na MS SQL Server?

Sposób, który chciałbym tutaj zaprezentować, a który spotkałem jakiś czas temu, oparty jest o funkcję ROW_NUMBER(). Niestety imitowanie w taki sposób dyrektywy LIMIT, ma tę wadę, że najpierw mimo wszystko pobierane są wszystkie rekordy, a dopiero potem następuje ich selekcja, co ma swoje odzwierciedlenie w czasie wykonywania kwerendy. Warto jednak to podejście zapamiętać:
SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY [KolumnaDoSortowania]) as [Wiersz] FROM [Tabela] ) a WHERE [Wiersz] > 10 and [Wiersz] <= 20
Wykonanie powyższego zapytania, zwróci nam z tabeli "Tabela" 10 kolejnych wierszy począwszy od 11-ego, wcześniej dokonując sortowania wszystkich danych względem pola "KolumnaDoSortowania". Czyli można powiedzieć, że jest to działanie podobne do tego, jakie możemy uzyskać w MySQL stosując dyrektywę "LIMIT 10, 10". Nie jest to rozwiązanie idealne, ale może okazać się bardzo przydatne w pewnych sytuacjach.

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: