Выборка и прокрутка
Операция получения строки из курсора называется выборкой. Параметры выборки:
FETCH FIRST
Выбирается первая строка курсора.
FETCH NEXT
Выбирается строка, следующая за последней выбранной строкой.
FETCH PRIOR
Выбирается строка, которая находится перед последней выбранной строкой.
FETCH LAST
Выбирается последняя строка курсора.
FETCH ABSOLUTE n
Выбирается строка, которая находится на n строк ниже первой строки курсора, если n — положительное целое число. Если n — отрицательное целое число, выбирается строка, которая находится на n строк выше конца курсора. Если n равно 0, не выбирается ни одна строка.
FETCH RELATIVE n
Выбирается строка, расположенная на расстоянии n относительно последней выбранной строки. Если n — положительное число, выбирается строка, которая находится на n строк ниже последней выбранной строки. Если n — отрицательное число, выбирается строка, которая находится на n строк выше последней выбранной строки. Если n равно 0, последняя строка выбирается заново.
Когда курсор открывается, его текущее положение логически находится перед первой строкой. В этом случае параметры выборки ведут себя следующим образом:
FETCH FIRST
Выбирается первая строка курсора.
FETCH NEXT
Выбирается первая строка курсора.
FETCH PRIOR
Не выбирается ни одна строка.
FETCH LAST
Выбирается последняя строка курсора.
FETCH ABSOLUTE n
Выбирается строка, которая находится на n строк ниже первой строки курсора, если n — положительное целое число. Если n — отрицательное целое число, выбирается строка, которая находится на n строк выше конца курсора (например, если n = -1, возвращается последняя строка курсора). Если n равно 0, не выбирается ни одна строка.
FETCH RELATIVE n
Выбирается строка курсора с номером n, если n — положительное целое число. Если n меньше или равно 0, не выбирается ни одна строка.
Ограниченные возможности курсоров Transact-SQL позволяют выбирать только одну строку за один раз. Серверные курсоры API поддерживает выборку блоков строк. Курсоры, поддерживающие одновременную выборку нескольких строк, называются блочными.
Классификация курсоров
Класс курсора определяется параметрами выборки, которые он поддерживает:
Однонаправленные курсоры
Выборка выполняется последовательно с первой до последней строки. Допускается только операция FETCH NEXT.
Прокручиваемые курсоры
Строки можно выбирать случайным образом из любого места курсора. Допустимы все операции выборки (единственное исключение: динамические курсоры не поддерживают FETCH ABSOLUTE).
Прокручиваемые курсоры особенно полезны для поддержки оперативных приложений. Курсор можно сопоставить с сеткой или списком в приложении. Когда пользователь перемещается по сетке вверх и вниз, приложение использует прокручиваемые выборки для получения строк курсора, которые требуются пользователю.
Функции API для выборки строк
Имена функций API и инструкций, функций или методов, используемых для выборки строк, отличаются друг от друга:
Курсоры Transact-SQL используют инструкции FETCH FIRST, FETCH LAST, FETCH NEXT, FETCH PRIOR, FETCH ABSOLUTE(n) и FETCH RELATIVE(n).
OLE DB использует такие методы, как IRowset::GetNextRows, IRowsetLocate::GetRowsAt, IRowsetLocate::GetRowsAtBookmark и IRowsetScroll::GetRowsAtRatio.
ODBC использует функцию SQLFetch, которая является аналогом инструкции FETCH NEXT для одной строки, или функцию SQLFetchScroll. Функция SQLFetchScroll поддерживает блочные курсоры и все параметры выборки (first, last, next, prior, absolute, relative).
ADO для перемещения курсора использует методы Move, MoveFirst, MoveLast, MoveNext и MovePreviousRecordset. Затем данные, которые находятся в заданном положении курсора, возвращаются методом набора записей GetRows. Метод GetRows можно вызвать напрямую, присвоив параметру Start количество строк, подлежащих выборке.
См. также