|
Автор: Глеб
Уфимцев Предлагаемый метод не претендует на звание самого лучшего. Он, может быть, и не лучше, но уж точно не хуже других. Поиск решения основывался на следующих пожеланиях: 1. Обращение к новой странице выборки не должно приводить к
перезапросу всей выборки. Решение, удовлетворяющее всем этим пожеланиям стразу, было найдено. Вот оно: 1. Имеем запрос, который мы хотим выбирать постранично select * from BigTable мы его не запускаем, а переходим к шагу 2. 2. Инициализируем таким образом: declare @handle int,@rows int При этом получаем пустой рекордсет, содержащий метаданные-описания колонок, которые можно использовать для получения названия полей (и типов). После NextRecordset также получаем хендл получившегося курсора и кол-во строк во всей выборке. Хендл нам понадобиться для подстановки в следующие вызовы, и его надо сохранить на клиенте в глобальную переменную, а кол-во строк может быть использовано для определения кол-ва страниц. 3. Получаем нужную страницу из выборки: exec sp_cursorfetch @handle,16,@rowid,@rowcount Где в @handle подставляем сохраненное значение хендла, в @rowid подставляется номер строки, с которой начинается интересующая нас страница, а в @rowcount подставляется кол-во строк на данной странице. Шаг 3 повторяем столько сколько нужно раз. 4. Освобождаем ресурсы после того, как страницы уже больше не понадобятся exec sp_cursorclose @handle |
Автор: Глеб Уфимцев 2003г. |