SQL Server 2012 Pagination med Order By och Offset Hämta

Många gånger utvecklare behöver implementera pagination på sökresultat. Paginering är processen att dela resultaten från en fråga till diskreta numrerade sidor.

SQL Server 2012 har infört en ny och enkel metod för att implementera paginering med OFFSET och FETCH NEXT. Denna process är faktiskt snabbare jämfört med tidigare komplexa metoder som att använda row_number. Denna funktion liknar MySQL Limit / Offset-klausulen.

OFFSET: anger antalet rader som ska hoppa innan det börjar räkna om
FETCH NÄSTA: antalet rader som ska visas i resultatet

Låt oss utforska Order By Offset hämta i SQL Server 2012 med exempel.

Skapa ett bord som heter COMPANY, och fyll i det med några data.

Om OBJECT_ID ('COMPANY') ÄR INTE NULL DROP TABLE COMPANY, SKAPA TABELLS FÖRETAGET (ID INT PRIMARY KEY, NAMN VARCHAR (25), LOCATION VARCHAR (25)) GÅ INSERT IN I SÄRSKILDA VÄRDEN (1, 'HCL' ), (2, "HP", "Bangalore"), (3, "Microsoft", "Bangalore"), (4, "Infosys", "Pune"), (5, "Google", "London") (6, 'GE', 'London'), (7, 'AltiSource', 'New York'), (8, 'Facebook', 'Palo alto'), (9, "IBM", "New York") , (10, 'TCS', 'Mumbai') GO SELECT * FRÅN FÖRETAGET GO


Problem 1.1 - Används endast OFFSET

VÄLJ ID, NAMN, PLATS FRÅN FÖRETAGET ORDER MED ID OFFSET 3 ROWS


I frågan ovan använder vi endast OFFSET, så det kommer att hoppa över de första tre raderna och returnera alla återstående rader i en bestämd ordning.



Problem 1.2 - Hoppa över nollrader och hämta de fem första raderna.

VÄLJ ID, NAMN, LÄGGNING FRÅN FÖRETAGET ORDER MED ID OFFSET 0 RÅD FÖDST NÄSTA 5 RUTAR ENDAST


I förfrågan ovan betyder OFFSET 0 ROWS att vi har hoppat över noll och FETCH NEXT 5 avser att hämta nästa fem rader.


Problem 1.3 - Hoppa över de fem första raderna och hämta de kommande fem raderna.

VÄLJ ID, NAMN, LÄGGNING FRÅN FÖRETAGET ORDER MED ID OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY


Här hoppar vi över de första fem raderna och hämtar de kommande fem raderna.

Resultatet ovan kan uppnås med hjälp av SQL Server 2005/2008 med hjälp av row_number och derived table.

VÄLJ ID, NAMN, PLATS FRÅN (VÄLJ ID, NAMN, PLATS, ROW_NUMBER () ÖVER (BESTÄLL AV ID) som rownum FRÅN FÖRETAGET c) DT VAR DT.rownum MELLAN 6 OCH 10


Prestanda jämförelse mellan OFFSET FETCH och ROW_NUMBER

OFFSET FETCH-tillvägagångssättet tog 0.003294, och row_number-tillvägagångssättet tog 0.0033038. Detta visar den nyare inställningen OFFSET FETCH i SQL Server 2012 är snabbare.


Problem 1.4 - Använda variabler med OFFSET och FETCH

DECLARE @OffSetRows AS INT = 5 DECLARE @FetchRows AS INT = 5 VÄLJ ID, NAMN, PLATS FRÅN FÖRETAGET ORDER MED ID OFFSET @OffSetRows ROWS FETCH NEXT @FetchRows ONLY ROWS ONLY


Det här är detsamma som Problem 1.3, men här använder vi variabler för att lagra OFFSET och FETCH-värden.