Сценарий :
Вие работите като разработчик на SQL Server с екип за разработка на преден край. Екипът на предния край трябва да приложи пагинация. Объркайте се относно пагинацията? Няма проблем. Помислете за преглед на банковото си извлечение или извлечението от кредитна карта. Когато приложенията показват само 10 или 20 записа на страница и трябва да щракнете върху "Напред", за да видите следващите записи. Това се нарича пагинация.Сега разбирате пагинацията, разработката на предния край се нуждае от SQL заявка от вас, която може да се използват за връщане на необходимите резултати и трябва да могат да предават номера на страница, за да връщат записи.
Решение:
Има няколко начина за писане на заявки за пагинация, един от тях е чрез използване на клауза OFFSET FETCH. Трябва да сортирате записите, ако искате да използвате OFFSET FETCH.Нека създадем таблица dbo.TotalSale и да вмъкнем някои примерни записи. Вмъкнах само 11 записа.
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 , [Състояние] [varchar](100) NULL, [Държава] [varchar](100) NULL, [Регион] [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' КАТО ДАТА), N'Charlotte', N'NC', N'USA', N'North America') , ( 2, N'M', N'Raza', N'Мобилен телефон', 2, 800, CAST(N'2015-07-15' КАТО ДАТА), N'Charlotte', N'NC', N'USA ', Северна Америка') , (3, Н'Кристи', Н'Ладсън', N'TV', 3, 1600, C AST(N'2015-04-02' КАТО ДАТА), N'High Point', N'NC', N'USA', N'North America') , (4, N'John', N'Rivers', N'Laptop', 5, 2400, CAST(N'2014-03-09' КАТО ДАТА), N'Jersey City', N'NJ', N'USA', N'North America') , (5, N 'Najaf', N'Ali', N'Computer', 1, 300, CAST(N'2015-06-20' КАТО ДАТА), N'Karachi', N'Sindh', N'Pakistan', N'Asia ' ) , ( 6, N'Sukhjeet', N'Singh', N'TV', 2, 900, CAST(N'2015-06-21' КАТО ДАТА), N'ChandiGar', N'Punjab', N 'Индия', Н'Азия') , (7, N'Chirag', N'Patel', N'Cell Phone', 5, 1500, CAST(N'2015-06-23' КАТО ДАТА), N'AhmadAbad ', N'Gujrat', N'India', N'Asia') , (8, N'Aleena', N'Aman', N'Laptop', 2, 800, CAST(N'2015-05-25' КАТО ДАТА), N'Lahore', N'Punjab', N'Pakistan', N'Asia') , (9, N'Petra', N'Henry', N'TV', 10, 5000, CAST(N '2015-04-08' КАТО ДАТА), N'Paris', N'Île-de-France', N'France', N'Europe') , (10, N'Rita', N'Roger', N "Лаптоп", 7, 2100, CAST(N'2015-04-11' КАТО ДАТА), 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' КАТО ДАТА), N'Frankfurt', N'Hesse', N'Germany', N'Europe' )
1) Да кажем, че искаме да пропуснем първите 5 реда и искаме да покажем всички останали редове, които можем да използваме под заявката.
Изберете [id] , [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] от dbo.TotalSale поръчка по id OFFSET 5 реда
Как да използвате клаузата OFFSET FETCH в SQL Server, за да пропуснете първите X редове и да покажете всички останали от тях - урок за SQL Server |
2) Сега, ако искаме да показваме 3 записа на страница, можем да използваме заявката по-долу. В този случай ще покажем първа страница
Изберете [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPrice] от dbo.TotalSale поръчка по идентификатор ОТМЕСТВАНЕ 0 РЕДА ИЗВЛЕЧВАНЕ САМО СЛЕДВАЩИ 3 РЕДА;
Как да използвате клаузата OFFSET FETCH за връщане на записи на страница в SQL Server - урок за SQL Server |
Забелязах, че имам OFFSET 0, което означава, че искам да покажа първа страница и с 3 реда. Ако искам да покажа записи от втора страница, ще задам на OFFSET 1, частта САМО Следващи 3 РЕДА ще остане същата, тъй като искам да показвам само 3 реда на страница.
Можем да използваме променливи, така че не е нужно да правите промени в заявката и като променим стойността на променливите, можем да върнем необходимите резултати. Можете да създадете Съхранена процедура, ако желаете, като използвате заявката по-долу.
Декларирайте @PageNumber intDeclare @RowsPerPage intset @RowsPerPage=3SET @PageNumber=1Изберете [id], [SalePersonFName], [SalePersonLName] , [ProductName],[ItemsSold], [SoldPrice] от dbo.TotalSale поръчка по идентификатор OFFSET (@PageNumber-1)*@RowsPerPage РЕДОВЕ ИЗВЛЕЧВАНЕ СЛЕДВАЩ @RowsPerPage САМО РЕДОВЕ;
Ако трябва да предоставим Съхранена процедура на Front End екипа, който приема номера на страница и броя на редовете, които биха искали да върнат за всяка страница, можете да използвате по-долу, за да създадете Съхранена процедура.
Създайте процедура dbo.sp_GetSaleRecordsPerPage
@PageNumber int, @RowsPerPage intAS BEGINИзберете [id], [SalePersonFName], [SalePersonLName], [ProductName],[ItemsSold], [SoldPriceTodSale order by dbo ОТМЕСТВАНЕ (@PageNumber-1)*@RowsPerPage РЕДОВЕ ИЗВЛЕЧВАНЕ СЛЕДВАЩ @RowsPerPage САМО РЕДОВЕ; КРАЙ
Да кажем, че ако искаме да върнем втора страница с 4 записа, можем да използваме dbo.sp_GetSaleRecordsPerPage, като предоставим стойности на параметрите по-долу.
EXEC dbo.sp_GetSaleRecordsPerPage 2,4предварително>
Как да извършите пагинация в SQL Server с помощта на клауза OFFSET FETCH - TSQL урок |