Door: Ashish Kumar Mehta | Bijgewerkt: 2011-04-18 | Reacties (4) | Gerelateerd: 1 | 2 | 3 | 4 | 5 | Meer > Paging
Probleem
Tijdens het doornemen van de nieuwe functies in SQL Server 2012 kwam ik een nieuwe functie OFFSET en FETCH tegen. De OFFSET en FETCH clausule van SQL Server 2012 geeft u de mogelijkheid om slechts een pagina of een venster van de resultaten op te halen uit de volledige resultatenset. In deze tip bekijken we een voorbeeld dat gebruik maakt van de OFFSET en FETCH functie van SQL Server 2012. Ook zullen we laten zien hoe u SQL Server Paging of SQL data page retrieval kunt implementeren met behulp van deze nieuwe functie.
Oplossing
Met behulp van deze functie van SQL Server 2012 kan men eenvoudig SQL Server Paging implementeren tijdens het weergeven van resultaten aan de client. We zullen een eenvoudig voorbeeld bekijken en ook hoe u een opgeslagen procedure kunt construeren om SQL paging te implementeren.
Laten we eens door een eenvoudig voorbeeld gaan dat laat zien hoe u de OFFSET en FETCH functie van SQL Server 2012 kunt gebruiken. U kunt hieronder zien dat de TSQL er hetzelfde uitziet als wat u vandaag schrijft, behalve dat we na de ORDER BY-clausule de OFFSET- en FETCH-commando’s hebben. Een ding om op te merken is dat u een ORDER BY moet gebruiken om deze functie te gebruiken. De OFFSET vertelt SQL in feite om de eerste 100 rijen over te slaan en de FETCH zal de volgende 5 rijen krijgen.
USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO
Het onderstaande fragment toont de uitvoer wanneer de bovenstaande commando’s worden uitgevoerd. Hieruit blijkt dat de eerste 100 rijen zijn verwijderd en dat de query de volgende 5 rijen in de volledige recordset heeft opgehaald.
Laten we een ander voorbeeld bekijken waarbij we een opgeslagen procedure maken die gebruikmaakt van de OFFSET- en FETCH-functie van SQL Server 2012 om sql-paging te bereiken terwijl de resultaten worden weergegeven op client-machines. In deze opgeslagen procedure geven we een paginanummer en het aantal terug te geven rijen op. Deze waarden worden vervolgens berekend om de juiste pagina en het juiste aantal rijen te krijgen.
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
Laten we verder gaan en de opgeslagen procedure uitvoeren met het onderstaande commando. Dit levert ons vijf records op vanaf pagina 21, waarbij de records zijn gerangschikt op BusinessEntityID.
/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO
Het onderstaande fragment toont de uitvoer zodra de bovenstaande opgeslagen procedure met succes is uitgevoerd. U kunt zien dat de eerste 100 (20 pagina’s * 5 rijen per pagina = 100) rijen zijn verwijderd en dat de opgeslagen procedure alleen de volgende 5 rijen heeft opgehaald, waardoor het aantal rijen dat naar de client wordt verzonden, wordt beperkt.
U hebt in deze tip gezien hoe eenvoudig u SQL Server Paging kunt bereiken door gebruik te maken van de OFFSET en FETCH functie van SQL Server 2012. SQL paging is niet meer zo moeilijk als vroeger met deze nieuwe functie.
Volgende stappen
- Krijg een overzicht van WITH RESULT SETS functie van SQL Server 2012
Laatst bijgewerkt: 2011-04-18
Over de auteur
Bekijk al mijn tips