Реферат: К вопросу об идентификаторах

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
Бесплатно скачать Реферат: К вопросу об идентификаторах