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 |