Я застрял с той же проблемой и хочу поделиться трюком, как вернуть страницу и общее количество строк .Проблема исправлена временной таблицей .Вот тело хранимой процедуры:
DECLARE @personsPageTable TABLE(
RowNumber INT,
PersonId INT,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
BirthDate DATE,
TotalCount INT);
;WITH PersonPage AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY persons.Id) RowNumber,
Id,
FirstName,
LastName,
BirthDate
FROM Persons
WHERE BirthDate >= @BirthDateFrom AND BirthDate <= @BirthDateTo
), TotalCount AS( SELECT COUNT(*) AS [Count] FROM PersonPage)
INSERT INTO @personsPageTable
SELECT *, (select * from TotalCount) TotalCount FROM PersonPage
ORDER BY PersonPage.RowNumber ASC
OFFSET ((@pageNumber - 1) * @pageSize) ROWS
FETCH NEXT @pageSize ROWS ONLY
SELECT TOP 1 TotalCount FROM @personsPageTable
SELECT
PersonId,
FirstName,
LastName,
BirthDate
FROM @personsPageTable
Как вы можете видеть, я помещаю CTE result и total строк во временную таблицу и выбираю два запроса.Первый общий счетчик возврата и вторая страница возврата с данными.