Sidresultat

Slutförd

Med ett tillägg till ORDER BY-satsen med namnet OFFSET-FETCH kan du bara returnera ett intervall av de rader som valts av frågan. Den lägger till möjligheten att ange en startpunkt (en förskjutning) och ett värde för att ange hur många rader du vill returnera (ett hämtningsvärde). Det här tillägget ger en praktisk teknik för att söka genom resultat.

Om du vill returnera rader som en "sida" i taget (med det tal du väljer för en sida) måste du tänka på att varje fråga med en OFFSET-FETCH-sats körs oberoende av andra frågor. Det finns inget tillstånd på serversidan och du måste spåra din position via en resultatuppsättning via kod på klientsidan.

OFFSET-FETCH-syntax

Syntaxen för OFFSET-FETCH-satsen, som tekniskt sett är en del av ORDER BY-satsen, är följande:

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY]

Använda OFFSET-FETCH

Om du vill använda OFFSET-FETCH anger du ett startvärde för OFFSET, som kan vara noll, och ett valfritt antal rader att returnera, som i följande exempel:

Det här exemplet returnerar de första 10 raderna och returnerar sedan de följande 10 raderna med produktdata baserat på ListPrice:

SELECT ProductID, ProductName, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC 
OFFSET 0 ROWS --Skip zero rows
FETCH NEXT 10 ROWS ONLY; --Get the next 10

Om du vill hämta nästa sida med produktdata använder du OFFSET-satsen för att ange antalet rader som ska hoppa över:

SELECT ProductID, ProductName, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC 
OFFSET 10 ROWS --Skip 10 rows
FETCH NEXT 10 ROWS ONLY; --Get the next 10

I syntaxdefinitionen kan du se att OFFSET-satsen krävs, men FETCH-satsen är inte det. Om FETCH-satsen utelämnas returneras alla rader efter OFFSET. Du kommer också att upptäcka att nyckelorden ROW och ROWS är utbytbara, liksom FIRST och NEXT, vilket möjliggör en mer naturlig syntax.

För att säkerställa att resultaten är korrekta, särskilt när du flyttar från sida till sida med data, är det viktigt att skapa en ORDER BY-sats som ger unik ordning och ger ett deterministiskt resultat. På grund av hur SQL Server-frågeoptimeraren fungerar är det tekniskt möjligt att en rad visas på fler än en sida, såvida inte radintervallet är deterministiskt.