Реферат: К вопросу об идентификаторах
ON O.ID = P.OuterID
WHERE RowNum > @MaxRecords - @PageSize
ORDER BY P.RowNum
-- снятие ограничений на количество записей
-- обрабатываемое одним запросом
SET ROWCOUNT 0
Не составляет никаких проблем написать подобную хранимую процедуру, которая разбивала бы на станицы какую угодно комбинацию таблиц подобным образом.
Ознакомившись с этими методами, может возникнуть совершенно законный вопрос - а нельзя ли реализовать все то же самое, но без динамических запросов и без временных таблиц? Точно то же самое нельзя, поскольку ключевое слово TOP не понимает переменных, а жестко зашивать в запрос номер и размер страницы смысла не имеет. Переменные понимает оператор ROWCOUNT, который делает то же самое, что и TOP, но область действия этого оператора распространяется и на подзапросы, что в данном случае не годится, поэтому и приходится использовать временную таблицу.
Но можно использовать курсоры, и с помощью них осуществлять смещение до нужной записи и производить необходимую выборку.
SET NOCOUNT ON DECLARE @Page int, @PageSize int, @MinRecord int, @MaxRecord int -- номер страницы SET @Page = 10 -- размер страницы SET @PageSize = 20 SET @MinRecord = @Page*@PageSize SET @MAXRecord = @Page*@PageSize+@PageSize SET ROWCOUNT @MaxRecord -- созданиекурсора DECLARE @Cursor CURSOR SET @Cursor = CURSOR SCROLL KEYSET READ_ONLY FOR SELECT * FROM OriginalTable ORDER BY SortValue OPEN @Cursor -- смещение к нужной записи FETCH ABSOLUTE @MinRecord FROM @Cursor DECLARE @i int SET @i = 0 -- выор в цикле нужного количества К-во Просмотров: 404
Бесплатно скачать Реферат: К вопросу об идентификаторах
|