Paginaresultaten

Voltooid

Met een uitbreiding op de COMPONENT ORDER BY met de naam OFFSET-FETCH kunt u alleen een bereik van de rijen retourneren die door uw query zijn geselecteerd. Hiermee kunt u een beginpunt (een offset) en een waarde opgeven om op te geven hoeveel rijen u wilt retourneren (een ophaalwaarde). Deze extensie biedt een handige techniek voor het bladeren door resultaten.

Als u rijen een pagina tegelijk wilt retourneren (met het nummer dat u voor een pagina kiest), moet u er rekening mee houden dat elke query met een OFFSET-FETCH-component onafhankelijk van andere query's wordt uitgevoerd. Er is geen status aan de serverzijde behouden en u moet uw positie bijhouden via een resultatenset via code aan de clientzijde.

OFFSET-FETCH-syntaxis

De syntaxis voor de COMPONENT OFFSET-FETCH, die technisch deel uitmaakt van de ORDER BY-component, is als volgt:

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

OFFSET-FETCH gebruiken

Als u OFFSET-FETCH wilt gebruiken, geeft u een beginwaarde OFFSET op, die mogelijk nul is en een optioneel aantal rijen dat moet worden geretourneerd, zoals in het volgende voorbeeld:

In dit voorbeeld worden de eerste 10 rijen geretourneerd en worden vervolgens de volgende 10 rijen met productgegevens geretourneerd op basis van de 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

Als u de volgende pagina met productgegevens wilt ophalen, gebruikt u de OFFSET-component om het aantal rijen op te geven dat u wilt overslaan:

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

In de syntaxisdefinitie ziet u dat de OFFSET-component is vereist, maar de FETCH-component is niet. Als de FETCH-component wordt weggelaten, worden alle rijen na OFFSET geretourneerd. U zult ook merken dat de trefwoorden RIJ en RIJEN uitwisselbaar zijn, net zoals FIRST en NEXT, waardoor een natuurlijkere syntaxis mogelijk is.

Om de nauwkeurigheid van de resultaten te garanderen, met name wanneer u van pagina naar pagina met gegevens gaat, is het belangrijk om een ORDER BY-component te maken die een unieke volgorde biedt en een deterministisch resultaat oplevert. Vanwege de manier waarop de queryoptimalisatie van SQL Server werkt, is het technisch mogelijk dat een rij op meer dan één pagina wordt weergegeven, tenzij het bereik van rijen deterministisch is.