By: Frissítve: Ashish Kumar Mehta | Frissítve: Hozzászólások (4) | Kapcsolódó: 2011-04-18 | Hozzászólások (4) | Kapcsolódó: 2011-04-18 | Hozzászólások (4) | Kapcsolódó: 2011-04-18 | Hozzászólások (4) | Kapcsolódó: 2011-04-18 Az SQL Server 2012 új funkcióinak áttekintése közben találkoztam az OFFSET és a FETCH új funkcióval. Az SQL Server 2012 OFFSET és FETCH záradéka lehetőséget biztosít arra, hogy a teljes eredményhalmazból csak egy oldalt vagy az eredmények egy ablakát lehessen lekérni. Ebben a tippben egy olyan példát fogunk megnézni, amely az SQL Server 2012 OFFSET és FETCH funkcióját használja. Azt is megmutatjuk, hogyan valósíthatja meg az SQL Server lapozását vagy az SQL-adatoldalak lekérdezését ennek az új funkciónak a segítségével.

megoldás

Az SQL Server 2012 ezen funkciójának használatával könnyen megvalósíthatja az SQL Server lapozását az eredmények ügyfél számára történő megjelenítése során. Megnézünk egy egyszerű példát, majd azt is, hogyan lehet egy tárolt eljárást létrehozni az SQL lapozás megvalósításához.

Menjünk végig egy egyszerű példán, amely bemutatja, hogyan használhatjuk az SQL Server 2012 OFFSET és FETCH funkcióját. Az alábbiakban láthatjuk, hogy a TSQL ugyanúgy néz ki, mint amit ma írunk, kivéve, hogy az ORDER BY záradék után az OFFSET és a FETCH parancsok következnek. Egy dolgot kell megjegyeznünk, hogy a funkció használatához ORDER BY-t kell használnunk. Az OFFSET lényegében azt mondja az SQL-nek, hogy hagyja ki az első 100 sort, a FETCH pedig a következő 5 sort kapja meg.

USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO

Az alábbi részlet a fenti parancsok futtatásakor kapott kimenetet mutatja. Ebből látható, hogy az első 100 sor el lett vetve, és a lekérdezés a teljes rekordhalmaz következő 5 sorát hozta le.

Menjünk végig egy másik példán, ahol létrehozunk egy olyan tárolt eljárást, amely az SQL Server 2012 OFFSET és FETCH funkcióját használja az sql lapozás megvalósítására, miközben az eredményeket megjeleníti az ügyfélgépeken. Ebben a tárolt eljárásban átadunk egy oldalszámot és a visszaadandó sorok számát. Ezeket az értékeket a rendszer kiszámítja, hogy megkapja a megfelelő oldalt és a sorok számát.

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

Futtassuk le a tárolt eljárást az alábbi parancs segítségével. Ezzel öt rekordot kapunk a 21. oldaltól kezdve, ahol a rekordok BusinessEntityID szerint vannak rendezve.

/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO

Az alábbi részlet mutatja a kimenetet, miután a fenti tárolt eljárást sikeresen végrehajtottuk. Látható, hogy az első 100 (20 oldal * 5 sor oldalanként = 100) sor el lett vetve, és a tárolt eljárás csak a következő 5 sort hívta le, ezáltal korlátozva az ügyfélnek küldött sorok számát.

Ebben a tippben láthatta, hogy az SQL Server 2012 SQL Server OFFSET és FETCH funkciójának használatával milyen könnyen megvalósíthatja az SQL Server lapozását. Az SQL lapozás ezzel az új funkcióval már nem olyan nehéz, mint korábban volt.

Következő lépések
  • Áttekintés az SQL Server 2012 WITH RESULT SETS funkciójáról

Most frissítve: A szerzőről

A szerzőről
Ashish Kumar Mehta az MSSQLTips.com közösséghez 2009 óta több mint 60 tippel.
Minden tippem megtekintése

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.