Scenario:
Stai lavorando come sviluppatore di SQL Server con il team di sviluppo front-end. Il team front-end deve implementare l'impaginazione. Confusione sull'impaginazione? Nessun problema. Pensa a visualizzare il tuo estratto conto bancario o l'estratto conto della carta di credito. Laddove le applicazioni mostrano solo 10 o 20 record per pagina e devi fare clic su Avanti per vedere i record successivi. Questo si chiama impaginazione. essere utilizzati per restituire i risultati richiesti e dovrebbero essere in grado di passare il numero di pagina per restituire i record.Soluzione:
Esistono diversi modi per scrivere query di impaginazione, uno di questi è utilizzare la clausola OFFSET FETCH. Devi ordinare i record se vuoi usare OFFSET FETCH.Creiamo la tabella dbo.TotalSale e inseriamo alcuni record di esempio. Ho inserito solo 11 record.
CREATE TABLE [dbo].[TotalSale]
(
[id] [int] NOT NULL ,
[SalePersonFName] [varchar](100) NULL ,
[SalePersonLName] [varchar](100) NULL ,
[ProductName] [varchar](100) NULL ,
[ItemsSold] [int] NULL ,
[SoldPrice] [float] NULL ,
[SoldDate] [date] NULL ,
[City] [varchar](100) NULL ,
[State] [varchar](100) NULL ,
[Country] [varchar](100) NULL ,
[Region] [varchar](100) NULL
)
INSERT [dbo].[TotalSale]
( [id], [SalePersonFName], [SalePersonLName], [ProductName],
[ItemsSold], [SoldPrice], [SoldDate], [City], [State], [Country],
[Region] )
VALUES ( 1, N'Aamir', N'Shahzad', N'TV', 1, 700, CAST(N'2015-07-15' AS DATE),
N'Charlotte', N'NC', N'USA', N'North America' )
, ( 2, N'M', N'Raza', N'Cell Phone', 2, 800, CAST(N'2015-07-15' AS DATE),
N'Charlotte', N'NC', N'USA', N'North America' )
, ( 3, N'Christy', N'Ladson', N'TV', 3, 1600,
CAST(N'2015-04-02' AS DATE), N'High Point', N'NC', N'USA',
N'North America' )
, ( 4, N'John', N'Rivers', N'Laptop', 5, 2400,
CAST(N'2014-03-09' AS DATE), N'Jersey City', N'NJ', N'USA',
N'North America' )
, ( 5, N'Najaf', N'Ali', N'Computer', 1, 300,
CAST(N'2015-06-20' AS DATE), N'Karachi', N'Sindh', N'Pakistan',
N'Asia' )
, ( 6, N'Sukhjeet', N'Singh', N'TV', 2, 900, CAST(N'2015-06-21' AS DATE),
N'ChandiGar', N'Punjab', N'India', N'Asia' )
, ( 7, N'Chirag', N'Patel', N'Cell Phone', 5, 1500,
CAST(N'2015-06-23' AS DATE), N'AhmadAbad', N'Gujrat', N'India',
N'Asia' )
, ( 8, N'Aleena', N'Aman', N'Laptop', 2, 800,
CAST(N'2015-05-25' AS DATE), N'Lahore', N'Punjab', N'Pakistan',
N'Asia' )
, ( 9, N'Petra', N'Henry', N'TV', 10, 5000, CAST(N'2015-04-08' AS DATE),
N'Paris', N'Île-de-France', N'France', N'Europe' )
, ( 10, N'Rita', N'Roger', N'Laptop', 7, 2100,
CAST(N'2015-04-11' AS DATE), N'Paris', N'Île-de-France', N'France',
N'Europe' )
, ( 11, N'Tamara', N'Tony', N'Cell Phone', 2, 1200,
CAST(N'2015-03-03' AS DATE), N'Frankfurt', N'Hesse', N'Germany',
N'Europe' ) 1) Diciamo che se vogliamo saltare le prime 5 righe e vogliamo mostrare tutte le altre righe che possiamo usare sotto la query.
Select
[id], [SalePersonFName], [SalePersonLName], [ProductName],
[ItemsSold], [SoldPrice]
from dbo.TotalSale
order by id
OFFSET 5 rows ![]() |
| Come utilizzare la clausola OFFSET FETCH in SQL Server per saltare le prime X righe e mostrarne tutte le altre - Tutorial di SQL Server |
2) Ora, se desideriamo mostrare 3 record per pagina, possiamo utilizzare la query di seguito. In questo caso mostreremo la prima pagina
Select
[id], [SalePersonFName], [SalePersonLName], [ProductName],
[ItemsSold], [SoldPrice]
from dbo.TotalSale
order by id
OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY; ![]() |
| Come utilizzare la clausola OFFSET FETCH per restituire i record per pagina in SQL Server - Tutorial di SQL Server |
Ho notato che ho OFFSET 0, significa che voglio mostrare la prima pagina e con 3 righe. Se voglio mostrare i record della seconda pagina, imposterò OFFSET 1, la parte SOLO 3 RIGHE successive rimarrà la stessa che desidera mostrare solo 3 righe per pagina.
Possiamo utilizzare variabili, quindi possiamo non è necessario apportare modifiche alla query e modificando il valore delle variabili, possiamo restituire i risultati richiesti. Se lo desideri, puoi creare una stored procedure utilizzando la query seguente.
Declare @PageNumber int
Declare @RowsPerPage int
set @RowsPerPage=3
SET @PageNumber=1
Select
[id], [SalePersonFName], [SalePersonLName], [ProductName],
[ItemsSold], [SoldPrice]
from dbo.TotalSale
order by id
OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY; Se dobbiamo fornire Stored Procedure al team Front End, che accetta il numero di pagina e il numero di righe che vorrebbe restituire per ogni pagina, puoi utilizzare di seguito per creare Stored Procedure.
Crea procedura dbo.sp_GetSaleRecordsPerPage
@PageNumber int,
@RowsPerPage int
AS
BEGIN
Select
[id], [SalePersonFName], [SalePersonLName], [ProductName],
[ItemsSold], [SoldPrice]
from dbo.TotalSale
order by id
OFFSET (@PageNumber-1)*@RowsPerPage
ROWS FETCH NEXT @RowsPerPage ROWS ONLY;
END Diciamo che se desideriamo restituire la seconda pagina con 4 record, possiamo utilizzare dbo.sp_GetSaleRecordsPerPage fornendo i valori dei parametri seguenti.
EXEC dbo.sp_GetSaleRecordsPerPage 2,4
![]() |
| Come eseguire l'impaginazione in SQL Server utilizzando la clausola OFFSET FETCH - Tutorial TSQL |


