Scenario :
Du arbetar som SQL Server-utvecklare med frontend-utvecklingsteam. Frontend-teamet behöver implementera paginering. Förvirrad om paginering? Inga problem. Tänk på att titta på ditt kontoutdrag eller kreditkortsutdrag. Där applikationer bara visar 10 eller 20 poster per sida och du måste klicka på nästa för att se nästa poster. Det kallas paginering.Nu förstår du paginering, frontend-utvecklingen behöver SQL-fråga från dig som kan användas för att returnera önskade resultat och de bör kunna skicka sidnummer för att returnera poster.
Lösning:
Det finns flera sätt att skriva pagineringsfrågor, ett av dem är att använda OFFSET FETCH-satsen. Du måste sortera posterna om du vill använda OFFSET FETCH.Låt oss skapa en dbo.TotalSale-tabell och infoga några exempelposter. Jag har bara infogat 11 poster.
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) Låt oss säga att om vi vill hoppa över de första 5 raderna och vill visa alla övriga rader som vi kan använda nedanstående fråga.
Select [id], [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [SoldPrice] from dbo.TotalSale order by id OFFSET 5 rows
Hur man använder OFFSET FETCH-klausulen i SQL Server för att hoppa över de första X raderna och visa alla resten av dem - SQL Server Tutorial |
2) Om vi nu vill visa 3 poster per sida kan vi använda nedanstående fråga. I det här fallet kommer vi att visa första sidan
Select [id], [SalePersonFName], [SalePersonLName], [ProductName], [ItemsSold], [SoldPrice] from dbo.TotalSale order by id OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY;
Hur man använder OFFSET FETCH-satsen för att returnera poster per sida i SQL Server - SQL Server Tutorial |
Märde att jag har OFFSET 0, det betyder att jag vill visa första sidan och med 3 rader. Om jag vill visa andra sidans poster, ställer jag in på OFFSET 1, nästa 3 rader kommer att förbli densamma som vill visa endast 3 rader per sida.
Vi kan använda variabler så att vi behöver inte göra ändringar i frågan och genom att ändra värdet på variabler kan vi returnera våra önskade resultat. Du kan skapa lagrad procedur om du vill genom att använda nedanstående fråga.
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;
Om vi behöver tillhandahålla lagrad procedur till Front End-teamet, som accepterar sidnummer och antal rader som de vill returnera för varje sida, kan du använda nedan för att skapa lagrad procedur.
Skapa procedur 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
Låt oss säga att om vi vill returnera andra sidan med 4 poster kan vi använda dbo.sp_GetSaleRecordsPerPage genom att tillhandahålla nedanstående parametervärden.
EXEC dbo.sp_GetSaleRecordsPerPage 2,4
Hur man utför paginering i SQL Server med hjälp av OFFSET FETCH-satsen - TSQL-handledning |