De: Ashish Kumar Mehta | Actualizat: 2011-04-18 | Comentarii (4) | Related: 1 | 2 | 2 | 3 | 4 | 4 | 5 | Mai multe > Paginare

Problemă

În timp ce mă uitam prin noile caracteristici din SQL Server 2012 am dat peste o nouă caracteristică OFFSET și FETCH. Clauza OFFSET și FETCH din SQL Server 2012 vă oferă opțiunea de a prelua doar o pagină sau o fereastră de rezultate din setul complet de rezultate. În acest sfat vom analiza un exemplu care utilizează funcția OFFSET și FETCH din SQL Server 2012. De asemenea, vom arăta cum puteți implementa Paginarea SQL Server sau recuperarea paginilor de date SQL folosind această nouă caracteristică.

Soluție

Utilizând această caracteristică a SQL Server 2012 se poate implementa cu ușurință Paginarea SQL Server în timp ce se afișează rezultatele către client. Ne vom uita la un exemplu simplu și apoi, de asemenea, la modul în care ați putea construi o procedură stocată pentru a implementa paginarea SQL.

Să parcurgem un exemplu simplu care demonstrează modul de utilizare a funcției OFFSET și FETCH din SQL Server 2012. Puteți vedea mai jos că TSQL arată la fel ca cel pe care îl scrieți astăzi, cu excepția faptului că după clauza ORDER BY avem comenzile OFFSET și FETCH. Un lucru de reținut este că trebuie să folosiți un ORDER BY pentru a utiliza această caracteristică. Practic, OFFSET îi spune lui SQL să sară peste primele 100 de rânduri, iar FETCH va obține următoarele 5 rânduri.

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

Secvența de mai jos arată rezultatul la rularea comenzilor de mai sus. Aceasta arată că primele 100 de rânduri au fost eliminate, iar interogarea a preluat următoarele 5 rânduri din setul complet de înregistrări.

Să trecem la un alt exemplu în care vom crea o procedură stocată care va utiliza funcția OFFSET și FETCH din SQL Server 2012 pentru a realiza paginarea sql în timp ce afișează rezultatele pe mașinile clienților. În această procedură stocată vom trece un număr de pagină și numărul de rânduri care trebuie returnate. Aceste valori sunt apoi calculate pentru a obține pagina și numărul de rânduri corecte.

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

Să mergem mai departe și să executăm procedura stocată folosind comanda de mai jos. Aceasta ne va oferi cinci înregistrări începând de la pagina 21, unde înregistrările sunt ordonate după BusinessEntityID.

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

Sheppet-ul de mai jos arată rezultatul odată ce procedura stocată de mai sus este executată cu succes. Puteți vedea că primele 100 (20 de pagini * 5 rânduri pe pagină = 100) de rânduri au fost eliminate, iar procedura stocată a preluat doar următoarele 5 rânduri, limitând astfel numărul de rânduri trimise către client.

Ați văzut în acest sfat cât de ușor puteți realiza Paginarea SQL Server folosind funcția OFFSET și FETCH din SQL Server 2012. Paginarea SQL nu mai este la fel de dificilă ca înainte cu această nouă caracteristică.

Pasii următori
  • Obțineți o imagine de ansamblu a caracteristicii WITH RESULT SETS din SQL Server 2012

Ultima actualizare: 2011-04-18

Despre autor
Ashish Kumar Mehta a contribuit la MSSQLTips.com din 2009 cu peste 60 de sfaturi.
Vezi toate sfaturile mele

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.