Podle: Ashish Kumar Mehta | Aktualizováno: 2011-04-18 | Komentáře (4) | Související: 1 | 2 | 3 | 4 | 5 | Více > Stránkování

Problém

Při prohlížení nových funkcí v SQL Serveru 2012 jsem narazil na novou funkci OFFSET a FETCH. Klauzule OFFSET a FETCH v SQL Serveru 2012 poskytuje možnost načíst z kompletní sady výsledků pouze stránku nebo okno výsledků. V tomto tipu se podíváme na příklad, který využívá funkci OFFSET a FETCH serveru SQL Server 2012. Také si ukážeme, jak lze pomocí této nové funkce implementovat stránkování SQL Serveru nebo načítání stránek dat SQL.

Řešení

Pomocí této funkce SQL Serveru 2012 lze snadno implementovat stránkování SQL Serveru při zobrazování výsledků klientovi. Podíváme se na jednoduchý příklad a pak také na to, jak by bylo možné zkonstruovat uloženou proceduru pro implementaci stránkování SQL.

Projdeme si jednoduchý příklad, který ukazuje, jak využít funkci OFFSET a FETCH serveru SQL Server 2012. Níže vidíte, že jazyk TSQL vypadá stejně jako ten, který píšete dnes, až na to, že za klauzulí ORDER BY máme příkazy OFFSET a FETCH. Je třeba si uvědomit, že pro použití této funkce je nutné použít ORDER BY. OFFSET v podstatě říká SQL, aby přeskočil prvních 100 řádků, a FETCH získá dalších 5 řádků.

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

Následující úryvek ukazuje výstup při spuštění výše uvedených příkazů. Z něj je patrné, že prvních 100 řádků bylo vyřazeno a dotaz získal dalších 5 řádků kompletního souboru záznamů.

Projdeme si další příklad, ve kterém vytvoříme uloženou proceduru, která bude využívat funkce OFFSET a FETCH serveru SQL Server 2012 k dosažení stránkování sql při zobrazování výsledků na klientských počítačích. V této uložené proceduře předáváme číslo stránky a počet řádků, které chceme vrátit. Tyto hodnoty se pak vypočítají, aby se získala správná stránka a počet řádků.

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

Pokračujme a proveďme uloženou proceduru pomocí níže uvedeného příkazu. Tím získáme pět záznamů začínajících na straně 21, kde jsou záznamy seřazeny podle BusinessEntityID.

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

Níže uvedený úryvek ukazuje výstup po úspěšném provedení výše uvedené uložené procedury. Je vidět, že prvních 100 (20 stránek * 5 řádků na stránku = 100) řádků bylo vyřazeno a uložená procedura načetla pouze dalších 5 řádků, čímž omezila počet řádků odeslaných klientovi.

V tomto tipu jste viděli, jak snadno můžete dosáhnout stránkování SQL Serveru pomocí funkce OFFSET a FETCH serveru SQL Server 2012. Díky této nové funkci není stránkování SQL tak obtížné jako dříve.

Další kroky
  • Získejte přehled o funkci WITH RESULT SETS serveru SQL Server 2012

Posledně aktualizováno: 2011-04-18

O autorovi
Ashish Kumar Mehta přispívá do MSSQLTips.com od roku 2009 více než 60 tipy.
Zobrazit všechny mé tipy

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.