Классика баз данных - статьи

       

Разбиение данных на страницы с использованием оператора TOP


Наиболее простым способом использования оператора TOP для разбиения на страницы является использование смещения по колонке ID. Процедура принимает параметр – количество записей на странице и "последний" ID, полученный в предыдущем запросе. При этом, благодаря новым возможностям оператора TOP, можно варьировать количество записей на странице, используя такую простую процедуру. SELECT TOP (@N) * FROM ИмяТаблицы WHERE КолонкаID > @ID

Более общий подход, не требующий сохранения "последнего" ID предыдущего запроса и формально не зависящий от значения ID выглядит так: SELECT * FROM (SELECT TOP (@N * (@PageNum + 1)) * FROM ИмяТаблицы ORDER BY КолонкаID) AS PTable WHERE КолонкаID NOT IN (SELECT TOP (@N * @PageNum) КолонкаID FROM ИмяТаблицы ORDER BY КолонкаID)

Следует обратить внимание читателя, что запрос будет выполнять свою задачу лишь при условии того, что колонка КолонкаID содержит уникальные значения. Таким образом, для обеспечения разбиения данных с помощью такой процедуры нужно иметь в таблице колонку IDENTITY.

Для того, чтобы подобная процедура работала в более ранних версиях SQL Server, необходимо использовать динамическое создание запроса: DECLARE @Query nvarchar(200)

SET @Query = 'SELECT * FROM (SELECT TOP ' + CAST(@N * (@PageNum + 1) AS nvarchar) + ' * FROM ИмяТаблицы ORDER BY КолонкаID) AS P WHERE КолонкаID NOT IN (SELECT TOP ' + CAST(@N * @PageNum AS nvarchar) + 'КолонкаID FROM ИмяТаблицы ORDER BY КолонкаID)'

EXECUTE(@Query)



Содержание раздела