A cura di: Ashish Kumar Mehta | Aggiornato: 2011-04-18 | Commenti (4) | Correlati: 1 | 2 | 3 | 4 | 5 | Altro > Paging

Problema

Mentre guardavo le nuove caratteristiche di SQL Server 2012 mi sono imbattuto in una nuova caratteristica OFFSET e FETCH. La clausola OFFSET e FETCH di SQL Server 2012 fornisce un’opzione per recuperare solo una pagina o una finestra dei risultati dal set di risultati completo. In questo suggerimento daremo un’occhiata a un esempio che utilizza la funzione OFFSET e FETCH di SQL Server 2012. Inoltre, mostreremo come è possibile implementare il paging di SQL Server o il recupero di pagine di dati SQL utilizzando questa nuova caratteristica.

Soluzione

Utilizzando questa caratteristica di SQL Server 2012 si può facilmente implementare il paging di SQL Server durante la visualizzazione dei risultati al client. Daremo un’occhiata ad un semplice esempio e poi anche come si potrebbe costruire una stored procedure per implementare il paging SQL.

Passiamo attraverso un semplice esempio che dimostra come utilizzare la funzione OFFSET e FETCH di SQL Server 2012. Potete vedere qui sotto che il TSQL sembra lo stesso di quello che scrivete oggi, tranne che dopo la clausola ORDER BY abbiamo i comandi OFFSET e FETCH. Una cosa da notare è che dovete usare un ORDER BY per usare questa caratteristica. L’OFFSET fondamentalmente dice a SQL di saltare le prime 100 righe e il FETCH otterrà le prossime 5 righe.

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

Il seguente snippet mostra l’output quando si eseguono i comandi di cui sopra. Questo mostra che le prime 100 righe sono state scartate e la query ha recuperato le prossime 5 righe nel recordset completo.

Passiamo ad un altro esempio in cui creeremo una stored procedure che utilizzerà la funzione OFFSET e FETCH di SQL Server 2012 per ottenere la paginazione sql mentre si visualizzano i risultati alle macchine client. In questa stored procedure stiamo passando un numero di pagina e il numero di righe da restituire. Questi valori vengono poi calcolati per ottenere la pagina corretta e il numero di righe.

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

Andiamo avanti ed eseguiamo la stored procedure utilizzando il comando seguente. Questo ci darà cinque record a partire dalla pagina 21 dove i record sono ordinati per BusinessEntityID.

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

Il seguente snippet mostra l’output una volta che la procedura memorizzata sopra è eseguita con successo. Potete vedere che le prime 100 (20 pagine * 5 righe per pagina = 100) righe sono state scartate e la stored procedure ha recuperato solo le prossime 5 righe limitando così il numero di righe inviate al client.

Hai visto in questo suggerimento come è facile ottenere il paging di SQL Server usando la funzione OFFSET e FETCH di SQL Server 2012. Il paging SQL non è più difficile come una volta con questa nuova caratteristica.

Passi successivi
  • Prendete una panoramica della caratteristica WITH RESULT SETS di SQL Server 2012

ultimo aggiornamento: 2011-04-18

Chi è l’autore
Ashish Kumar Mehta contribuisce alla comunità MSSQLTips.com dal 2009 con oltre 60 consigli.
Vedi tutti i miei consigli

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.