Výsledky stránky

Dokončeno

Rozšíření klauzule ORDER BY s názvem OFFSET-FETCH umožňuje vrátit pouze rozsah řádků vybraných dotazem. Přidá možnost zadat výchozí bod (posun) a hodnotu, která určuje, kolik řádků chcete vrátit (hodnota načtení). Toto rozšíření poskytuje pohodlnou techniku stránkování výsledků.

Pokud chcete vrátit řádky "stránky" najednou (pomocí libovolného čísla, které zvolíte pro stránku), budete muset zvážit, že každý dotaz s klauzulí OFFSET-FETCH běží nezávisle na ostatních dotazech. Není zachován žádný stav na straně serveru a budete muset sledovat svou pozici prostřednictvím sady výsledků prostřednictvím kódu na straně klienta.

Syntaxe OFFSET-FETCH

Syntaxe klauzule OFFSET-FETCH, která je technicky součástí klauzule ORDER BY, je následující:

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

Použití FUNKCE POSUN-FETCH

Chcete-li použít posun-FETCH, zadáte počáteční hodnotu POSUN, která může být nula, a volitelný počet řádků, které se mají vrátit, jako v následujícím příkladu:

Tento příklad vrátí prvních 10 řádků a pak vrátí dalších 10 řádků dat produktu na základě hodnoty 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

Pokud chcete načíst další stránku dat o produktech, zadejte počet řádků, které chcete přeskočit, pomocí klauzule OFFSET:

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

V definici syntaxe vidíte, že klauzule OFFSET je povinná, ale klauzule FETCH není. Pokud je klauzule FETCH vynechána, vrátí se všechny řádky následující POSUN. Zjistíte také, že klíčová slova ŘÁDEK a ŘÁDKY jsou zaměnitelná, stejně jako FIRST a NEXT, což umožňuje přirozenější syntaxi.

Pokud chcete zajistit přesnost výsledků, zejména při přechodu ze stránky na stránku dat, je důležité vytvořit klauzuli ORDER BY, která poskytuje jedinečné řazení a poskytuje deterministický výsledek. Vzhledem ke způsobu, jakým optimalizátor dotazů SQL Serveru funguje, je technicky možné, že se řádek zobrazí na více než jedné stránce, pokud není rozsah řádků deterministický.