TSQL query Skip and Take – Utile per visualizzazioni paginate
Oggi vediamo come utilizzare la funzione di sistema ROW_NUMBER() disponibile dalla versione di SQL 2005 in poi per effettuare delle quary che prendono il nome di Skip and Take. Questa metodologia è stata introdotta con LINQ e consente di recuperare solo un certo numero di record, ad esempio utile per la paginazione in una griglia. Supponiamo di avere 1 milione di record in una tabella e vogliamo creare una griglia paginata, questo è il caso migliore di utilizzo di Skip and Take per evitare di selezionare tutti i record già dalla prima pagina. In pratica si imposta il lumero di record che si vuole estrarre (@QUNTI) e a partire da quele elemento (@DA). Di seguito il codesnippet T-SQL:
USE [Northwind] GO DECLARE @DA BIGINT, @QUANTI BIGINT SET @DA = 1 SET @QUANTI = 10 SELECT * FROM( SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] ,ROW_NUMBER() OVER (ORDER BY [CustomerID]) AS ROWNUM FROM [Customers] ) AS SKTK WHERE SKTK.ROWNUM BETWEEN @DA AND (@DA + @QUANTI - 1)
Quindi, nel caso della griglia paginata con 10 record per pagina si avrà:
- Pagina 1: @DA = 1, @QUANTI = 10
- Pagina 2: @DA = 11, @QUANTI = 10
- …
- Pagina n: @DA = n * @QUANTI – @QUANTI + 1, @QUANTI = 10
Enjoy snippet!
2 commenti