I have #temp table and I need paginate all data in this table. How best way to table pagination?
create table #temp (
Id int
,SomeName nvarchar(100)
)
create table #tempPage (
Id int
,SomeName nvarchar(100)
,PageIndex int
)
--Test data
insert #temp (Id, SomeName) values
(1,'A'),
(2,'B'),
(3,'C'),
(4,'D'),
(5,'F'),
(6,'G'),
(7,'H'),
(8,'A1'),
(9,'B1'),
(10,'C1'),
(11,'D1'),
(12,'F1'),
(13,'G1'),
(14,'H1');
--Page size
declare @PageSize int = 5
--Max page count
declare @MaxPages float = (
select
case when count(Id)%@PageSize>0 then count(Id)/@PageSize+1 else count(Id)/@PageSize end
from #temp
)
declare @PageFrom int = 0
declare @CurrentPage int = 1
while @CurrentPage <= @MaxPages
begin
insert #tempPage (Id, SomeName, PageIndex)
SELECT
Id, SomeName, @CurrentPage
FROM #temp
ORDER BY id OFFSET @PageFrom ROWS
FETCH NEXT @PageSize ROWS ONLY;
set @PageFrom = @PageFrom + @PageSize
set @CurrentPage = @CurrentPage + 1
end
select * from #tempPage
drop table #temp
drop table #tempPage
Result:
It's work very slow on big data. I use Ms Sql 2012.