Impaginazione SQL Server 2012 con ordine per e offset Fetch

Molte volte gli sviluppatori devono implementare l'impaginazione sui risultati di ricerca. L'impaginazione è il processo di divisione dei risultati di una query in pagine numerate discrete.

SQL Server 2012 ha introdotto un metodo nuovo e semplice per implementare l'impaginazione utilizzando OFFSET e FETCH NEXT. Questo processo è in realtà più veloce rispetto ai precedenti metodi complessi come l'uso di row_number. Questa funzione è in qualche modo simile alla clausola Limite / Offset di MySQL.

COMPENSARE: specifica il numero di righe da saltare prima che inizi a restituire righe
FETCH NEXT: il numero di righe da visualizzare nel risultato

Lasciaci esplorare Ordina per scostamento offset in SQL Server 2012 con esempi.

Creare una tabella denominata COMPANY e popolarla con alcuni dati.

IF OBJECT_ID ('COMPANY') NON È NULL DROP TABLE COMPANY GO CREA TABLE COMPANY (ID INT CHIAVE PRIMARIA, NAME VARCHAR (25), LOCATION VARCHAR (25)) VA INSERISCI NEI VALORI AZIENDALI (1, 'HCL', 'London' ), (2, "HP", "Bangalore"), (3, "Microsoft", "Bangalore"), (4, "Infosys", "Pune"), (5, "Google", "Londra"), (6, 'GE', 'London'), (7, 'AltiSource', 'New York'), (8, 'Facebook', 'Palo alto'), (9, 'IBM', 'New York') (10, "TCS", "Mumbai") SELEZIONA SELEZIONA * DALLA SOCIETA GO


Problema 1.1 - Utilizzo solo OFFSET

SELEZIONA ID, NOME, POSIZIONE DALL'AZIENDA ORDINA PER ID OFFSET 3 ROW


Nella query sopra, stiamo usando solo OFFSET, quindi salterà le prime tre righe e restituirà tutte le righe rimanenti in un ordine determinato.



Problema 1.2 - Salta zero righe e recupera le prime cinque righe.

SELEZIONA ID, NOME, POSIZIONE DALL'AZIENDA ORDINA PER ID OFFSET 0 ROWS FETCH NEXT SOLO 5 ROWS


Nella query sopra, OFFSET 0 ROWS significa che abbiamo saltato zero e FETCH NEXT 5 intende recuperare le cinque righe successive.


Problema 1.3 - Salta le prime cinque righe e recupera le successive cinque righe.

SELEZIONA ID, NOME, POSIZIONE DALL'AZIENDA ORDINA PER ID OFFSET 5 ROWS FETCH NEXT 5 ROWS SOLO


Qui, saltiamo le prime cinque righe e recuperiamo le prossime cinque righe.

Il risultato sopra può essere ottenuto utilizzando SQL Server 2005/2008 utilizzando row_number e la tabella derivata.

SELEZIONA ID, NOME, POSIZIONE DA (SELEZIONA ID, NOME, POSIZIONE, ROW_NUMBER () SOPRA (ORDER BY ID) come rown DA DALL'AZIENDA c) DT DOVE DT.rownum TRA 6 E 10


Confronto delle prestazioni tra OFFSET FETCH e ROW_NUMBER

L'approccio OFFSET FETCH ha avuto 0.003294e l'approccio row_number ha preso 0.0033038. Questo mostra l'approccio più recente OFFSET FETCH in SQL Server 2012 è più veloce.


Problema 1.4 - Uso delle variabili con OFFSET e FETCH

DECLARE @OffSetRows AS INT = 5 DECLARE @FetchRows AS INT = 5 SELEZIONA ID, NOME, POSIZIONE DALL'AZIENDA ORDINA PER ID OFFSET @OffSetRows ROWS FETCH NEXT @FetchRows ROWS ONLY


Questo è lo stesso del Problema 1.3, ma qui stiamo usando le variabili per memorizzare i valori OFFSET e FETCH.