By: Päivitetty: Ashish Kumar Mehta | Päivitetty: Kommentit (4) | Aiheeseen liittyen: 1 | 2 | 3 | 4 | 4 | 5 | Lisää > Paging

Problem

Katsellessani SQL Server 2012:n uusia ominaisuuksia törmäsin uuteen ominaisuuteen OFFSET ja FETCH. SQL Server 2012:n OFFSET- ja FETCH-lauseke tarjoaa mahdollisuuden hakea koko tulosjoukosta vain sivun tai ikkunan tuloksista. Tässä vinkissä tarkastelemme esimerkkiä, jossa käytetään SQL Server 2012:n OFFSET- ja FETCH-ominaisuutta. Näytämme myös, miten voit toteuttaa SQL Server Pagingin tai SQL-tietosivun haun tämän uuden ominaisuuden avulla.

Ratkaisu

Tämän SQL Server 2012:n ominaisuuden avulla voi helposti toteuttaa SQL Server Pagingin, kun tuloksia näytetään asiakkaalle. Käymme läpi yksinkertaisen esimerkin ja sen jälkeen myös sen, miten voit rakentaa tallennetun proseduurin SQL-pagingin toteuttamiseksi.

Käydään läpi yksinkertainen esimerkki, joka havainnollistaa SQL Server 2012:n OFFSET- ja FETCH-ominaisuuden käyttöä. Alla näet, että TSQL näyttää samalta kuin mitä kirjoitat tänään, paitsi että ORDER BY -lausekkeen jälkeen meillä on OFFSET- ja FETCH-komennot. Huomioitavaa on, että tämän ominaisuuden käyttäminen edellyttää ORDER BY -lausekkeen käyttöä. OFFSET periaatteessa käskee SQL:ää ohittamaan ensimmäiset 100 riviä ja FETCH saa seuraavat 5 riviä.

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

Alla olevassa pätkässä näkyy tuloste, kun edellä mainitut komennot suoritetaan. Tästä näkyy, että ensimmäiset 100 riviä hylättiin ja kysely haki täydellisen tietuejoukon seuraavat 5 riviä.

Käydään läpi toinen esimerkki, jossa luodaan tallennettu proseduuri, joka käyttää SQL Server 2012:n OFFSET- ja FETCH-ominaisuutta sql-haun aikaansaamiseksi, kun tulokset näytetään asiakaskoneille. Tässä tallennetussa proseduurissa annamme sivunumeron ja palautettavien rivien määrän. Nämä arvot lasketaan sitten oikean sivun ja rivimäärän saamiseksi.

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

Siirretään eteenpäin ja suoritetaan tallennettu proseduuri alla olevalla komennolla. Näin saamme viisi tietuetta alkaen sivulta 21, jossa tietueet on järjestetty BusinessEntityID:n mukaan.

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

Alla olevassa pätkässä näkyy tuloste, kun edellä mainittu tallennettu proseduuri on suoritettu onnistuneesti. Näet, että ensimmäiset 100 (20 sivua * 5 riviä per sivu = 100) riviä hylättiin ja tallennettu proseduuri haki vain seuraavat 5 riviä ja rajoitti näin asiakkaalle lähetettyjen rivien määrää.

Olet nähnyt tässä vinkissä, kuinka helposti SQL Serverin sivutus voidaan toteuttaa SQL Server 2012:n OFFSET- ja FETCH-ominaisuuden avulla. SQL-palvelimen hakemistointi ei ole enää niin vaikeaa kuin ennen tämän uuden ominaisuuden ansiosta.

Jatkovaiheet
  • Katsaus SQL Server 2012:n WITH RESULT SETS -ominaisuuteen

Viimeisin päivitetty:

Tekijästä
Ashish Kumar Mehta on osallistunut MSSQLTipsin julkaisemiseen.com-yhteisöön vuodesta 2009 lähtien yli 60 vinkillä.
Katso kaikki vinkkini

Vastaa

Sähköpostiosoitettasi ei julkaista.