2015-09-05
zelder
2017-06-06
05/09
2015

Постраничный вывод в MS SQL

Пример вывода 1 (встроенный механизм ORDER BY в SQL Server 2012)
SELECT 
*,
COUNT(*) over() as TotalCount, -- подсчет общего количества записей (!! Внимание !! очень тугой вариант, если нужно так, то лучше использовать метод "ранжирования", вариант 2)
FROM [dbo].[tTable1]
ORDER BY id, date -- обязательно сортировка
OFFSET @pageOffset ROW FETCH NEXT @pageSize ROWS ONLY


Пример вывода 2 (функция ранжирования)
;With ReportEntities As(
Select ROW_NUMBER() Over (Order By co.[Title] asc) As RowSort
,COUNT(*) over () as TotalCount -- всего записей вариант 1 (считает тут каждую запись)
  ,r.[Title]
  ,r.[Mail]
  ,r.[Phone]
  ,r.[CountryID]
  ,co.[Title] as CountryName
From [zel].[dbo].[tTable1] r
LEFT JOIN [zel].[dbo].[tTable2] co ON co.[OBJECT_ID] = r.[CountryID]
WHERE r.[CountryID] = 104
)
SELECT
  r.[Title]
,r.TotalCount -- всего записей вариант 1 (считает тут каждую запись)
,(select count(*) from ReportEntities) as TotalCount2 -- всего записей вариант 2 (считает несколько раз только (сколько записей))
  ,r.[Mail]
  ,r.[Phone]
  ,r.[CountryID]
  ,r.CountryName
,r.RowSort
FROM ReportEntities r
WHERE (r.RowSort Between 0 AND 10)
ORDER BY r.RowSort Asc

Статьи по теме
1. статья1