By: Ashish Kumar Mehta | Updated: 2011-04-18 | Komentarze (4) | Powiązane: 1 | 2 | 3 | 4 | 5 | Więcej > Stronicowanie
Problem
Przeglądając nowe funkcje w SQL Server 2012 natknąłem się na nową funkcję OFFSET i FETCH. Klauzula OFFSET i FETCH w SQL Server 2012 daje nam możliwość pobrania tylko strony lub okna wyników z pełnego zestawu wyników. W tym poradniku przyjrzymy się przykładowi, który wykorzystuje funkcję OFFSET i FETCH w SQL Server 2012. Pokażemy również, jak można zaimplementować funkcję SQL Server Paging lub pobieranie stron danych SQL przy użyciu tej nowej funkcji.
Rozwiązanie
Używając tej funkcji SQL Server 2012 można łatwo zaimplementować funkcję SQL Server Paging podczas wyświetlania wyników klientowi. Przyjrzymy się prostemu przykładowi, a także temu, jak można skonstruować procedurę składowaną, aby zaimplementować stronicowanie SQL.
Przejrzyjmy się prostemu przykładowi, który demonstruje, jak korzystać z funkcji OFFSET i FETCH w SQL Server 2012. Możesz zobaczyć poniżej, że TSQL wygląda tak samo jak to, co piszesz dzisiaj, z wyjątkiem tego, że po klauzuli ORDER BY mamy polecenia OFFSET i FETCH. Jedną rzeczą, którą należy zauważyć jest to, że musisz użyć ORDER BY, aby użyć tej funkcji. OFFSET w zasadzie mówi SQL, aby pominąć pierwsze 100 wierszy, a FETCH pobierze następne 5 wierszy.
USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO
Poniższy wycinek pokazuje wyjście po uruchomieniu powyższych poleceń. Pokazuje on, że pierwsze 100 wierszy zostało odrzuconych, a zapytanie pobrało 5 następnych wierszy w pełnym zbiorze rekordów.
Przejrzyjmy kolejny przykład, w którym utworzymy procedurę składowaną, która użyje funkcji OFFSET i FETCH w SQL Server 2012, aby osiągnąć stronicowanie sql podczas wyświetlania wyników na komputerach klienckich. W tej procedurze przechowywanej przekazujemy numer strony oraz liczbę wierszy do zwrócenia. Wartości te są następnie obliczane, aby uzyskać prawidłową stronę i liczbę wierszy.
USE AdventureWorks2008R2GOIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'.') AND type in (N'P', N'PC'))DROP PROCEDURE .GOCREATE PROCEDURE ExampleUsageOfSQLServerDenaliPagingFeature ( @PageNo INT, @RowCountPerPage INT )ASSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET (@PageNo - 1) * @RowCountPerPage ROWS FETCH NEXT @RowCountPerPage ROWS ONLYGO
Przejdźmy dalej i wykonajmy procedurę przechowywaną za pomocą poniższego polecenia. To da nam pięć rekordów zaczynających się od strony 21, gdzie rekordy są uporządkowane według BusinessEntityID.
/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO
Poniższy snippet pokazuje wyjście po pomyślnym wykonaniu powyższej procedury składowanej. Można zauważyć, że pierwsze 100 (20 stron * 5 wierszy na stronę = 100) wierszy zostało odrzuconych, a procedura przechowywana pobiera tylko 5 następnych wierszy, ograniczając w ten sposób liczbę wierszy wysyłanych do klienta.
W tym poradniku zobaczyłeś, jak łatwo można osiągnąć stronicowanie w SQL Server przy użyciu funkcji OFFSET i FETCH w SQL Server 2012. Dzięki tej nowej funkcji stronicowanie w SQL nie jest już tak trudne, jak kiedyś.
Następne kroki
- Zapoznaj się z funkcją WITH RESULT SETS w SQL Server 2012
Ostatnia aktualizacja: 2011-04-18
O autorze
Zobacz wszystkie moje porady
.