Vad: Ashish Kumar Mehta | Uppdaterad: 2011-04-18 | Kommentarer (4) | Relaterad: 1 | 2 | 3 | 4 | 4 | 5 | Mer > Paging

Problem

När jag tittade igenom de nya funktionerna i SQL Server 2012 stötte jag på en ny funktion OFFSET och FETCH. OFFSET- och FETCH-klausulen i SQL Server 2012 ger dig möjlighet att hämta endast en sida eller ett fönster av resultaten från den fullständiga resultatuppsättningen. I det här tipset ska vi titta på ett exempel som använder OFFSET- och FETCH-funktionen i SQL Server 2012. Vi kommer också att visa hur du kan implementera SQL Server Paging eller SQL data page retrieval med hjälp av den här nya funktionen.

Lösning

Med hjälp av den här funktionen i SQL Server 2012 kan man enkelt implementera SQL Server Paging samtidigt som man visar resultaten för klienten. Vi kommer att ta en titt på ett enkelt exempel och sedan också hur man kan konstruera en lagrad procedur för att implementera SQL paging.

Låt oss gå igenom ett enkelt exempel som visar hur man använder OFFSET och FETCH-funktionen i SQL Server 2012. Du kan se nedan att TSQL ser likadan ut som det du skriver idag förutom att efter ORDER BY-klausulen har vi OFFSET- och FETCH-kommandona. En sak att notera är att du måste använda en ORDER BY för att använda den här funktionen. OFFSET talar i princip om för SQL att hoppa över de första 100 raderna och FETCH kommer att hämta de nästa 5 raderna.

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

Understående utdrag visar utdata när du kör ovanstående kommandon. Det visar att de första 100 raderna kasserades och att frågan hämtade de nästa 5 raderna i den kompletta recordset.

Låt oss gå igenom ett annat exempel där vi kommer att skapa en lagrad procedur som kommer att använda OFFSET- och FETCH-funktionen i SQL Server 2012 för att uppnå sql-blandning samtidigt som vi visar resultaten på klientmaskinerna. I den här lagrade proceduren skickar vi in ett sidnummer och antalet rader som ska returneras. Dessa värden beräknas sedan för att få fram rätt sida och antal rader.

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

Vi går vidare och kör den lagrade proceduren med hjälp av kommandot nedan. Detta kommer att ge oss fem poster med början på sida 21 där posterna är ordnade efter BusinessEntityID.

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

Understående utdrag visar utdata när den lagrade proceduren ovan har utförts framgångsrikt. Du kan se att de första 100 (20 sidor * 5 rader per sida = 100) raderna har kastats bort och att den lagrade proceduren endast hämtade de fem följande raderna, vilket begränsar antalet rader som skickas till klienten.

Du har i det här tipset sett hur enkelt du kan uppnå SQL Server Paging med hjälp av OFFSET- och FETCH-funktionen i SQL Server 2012. SQL paging är inte lika svårt som tidigare med den här nya funktionen.

Nästa steg
  • Få en översikt över WITH RESULT SETS-funktionen i SQL Server 2012

Sist uppdaterad: 2011-04-18

Om författaren
Ashishish Kumar Mehta har bidragit till MSSQLTips.com community sedan 2009 med över 60 tips.
Se alla mina tips

Lämna ett svar

Din e-postadress kommer inte publiceras.