one way is we can use row_number function as follows to pull data from db.
select * from (
select ROW_NUMBER() over (order by SalesOrderDate desc) as rn, *
from sales.salesorderheader
) as x
where rn BETWEEN ( ((@Index - 1) * @PageSize )+ 1) AND @Index * @PageSize
another way is
;WITH x AS
(
SELECT EmpID FROM dbo.Emp
ORDER BY EmpID
OFFSET @PageSize * (@Index - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY
)
SELECT e.columns
FROM x INNER JOIN dbo.Emp AS e
ON x.EmpID = e.EmpID
ORDER BY ...;
tell me which one is good and when to use which one? thanks