Af: Ashish Kumar Mehta | Opdateret: 2011-04-18 | Kommentarer (4) | Relateret: 1 | 2 | 3 | 4 | 4 | 5 | Mere > Paging

Problem

Mens jeg kiggede gennem de nye funktioner i SQL Server 2012, stødte jeg på en ny funktion OFFSET og FETCH. OFFSET- og FETCH-klausulen i SQL Server 2012 giver dig mulighed for kun at hente en side eller et vindue af resultaterne fra det komplette resultatsæt. I dette tip vil vi se på et eksempel, som bruger OFFSET and FETCH-funktionen i SQL Server 2012. Vi vil også vise, hvordan du kan implementere SQL Server Paging eller SQL-datasidehentning ved hjælp af denne nye funktion.

Løsning

Ved hjælp af denne funktion i SQL Server 2012 kan man nemt implementere SQL Server Paging, mens man viser resultaterne til klienten. Vi vil tage et kig på et simpelt eksempel og derefter også hvordan man kan konstruere en stored procedure for at implementere SQL paging.

Lad os gennemgå et simpelt eksempel, som viser hvordan man kan bruge OFFSET og FETCH funktionen i SQL Server 2012. Du kan se nedenfor, at TSQL’en ser ud som det samme som det, du skriver i dag, bortset fra at vi efter ORDER BY-klausulen har OFFSET- og FETCH-kommandoerne. En ting du skal være opmærksom på er, at du skal bruge en ORDER BY for at bruge denne funktion. OFFSET fortæller i princippet SQL at springe de første 100 rækker over, og FETCH vil få de næste 5 rækker.

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

Nedenstående uddrag viser output, når du kører ovenstående kommandoer. Det viser, at de første 100 rækker blev kasseret, og forespørgslen hentede de næste 5 rækker i det komplette recordset.

Lad os gennemgå et andet eksempel, hvor vi vil oprette en lagret procedure, som vil bruge OFFSET- og FETCH-funktionen i SQL Server 2012 til at opnå sql-paging, mens resultaterne vises til klientmaskiner. I denne lagrede procedure indsender vi et sidetal og det antal rækker, der skal returneres. Disse værdier beregnes derefter for at få den korrekte side og det korrekte antal rækker.

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

Lad os gå videre og udføre den gemte procedure ved hjælp af nedenstående kommando. Dette vil give os fem poster startende på side 21, hvor posterne er ordnet efter BusinessEntityID.

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

Nedenstående uddrag viser outputtet, når ovenstående lagrede procedure er blevet udført med succes. Du kan se, at de første 100 (20 sider * 5 rækker pr. side = 100) rækker blev kasseret, og at den lagrede procedure kun hentede de næste 5 rækker og dermed begrænsede antallet af rækker, der blev sendt til klienten.

Du har i dette tip set, hvor nemt du kan opnå SQL Server Paging ved hjælp af OFFSET- og FETCH-funktionen i SQL Server 2012. SQL paging er ikke så svært som det plejer at være med denne nye funktion.

Næste trin
  • Få et overblik over WITH RESULT SETS funktionen i SQL Server 2012

Sidst opdateret: 2011-04-18

Om forfatteren
Ashishish Kumar Mehta har bidraget til MSSQLTips.com-fællesskabet siden 2009 med over 60 tips.
Se alle mine tips

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.