Курсоры (ядро СУБД)

Операции в реляционной базе данных выполняются над множеством строк. Набор строк, возвращаемый инструкцией SELECT, содержит все строки, которые удовлетворяют условиям, указанным в предложении WHERE инструкции. Такой полный набор строк, возвращаемых инструкцией, называется результирующим набором. Приложения, особенно интерактивные, не всегда эффективно работают с результирующим набором как с единым целым. Им нужен механизм, позволяющий обрабатывать одну строку или небольшое их число за один раз. Курсоры являются расширением результирующих наборов, которые предоставляют такой механизм.

Курсоры позволяют усовершенствовать обработку результатов:

  • позиционируясь на отдельные строки результирующего набора;
  • получая одну или несколько строк от текущей позиции в результирующем наборе;
  • поддерживая изменение данных в строках в текущей позиции результирующего набора;
  • поддерживая разные уровни видимости изменений, сделанных другими пользователями для данных, представленных в результирующем наборе;
  • предоставляя инструкциям Transact-SQL в сценариях, хранимых процедурах и триггерах доступ к данным результирующего набора.

Запрос курсора

Microsoft SQL Server 2005 поддерживает два метода запроса курсоров.

  • Transact-SQL.
    Язык Transact-SQL поддерживает синтаксис использования курсоров по стандарту SQL-92.
  • API-функции курсоров базы данных.
    SQL Server поддерживает функциональность курсоров для следующих API-интерфейсов баз данных:
    • ADO (Microsoft ActiveX Data Object);
    • OLE DB;
    • открытый интерфейс доступа к базам данных (ODBC).

Оба этих способа никогда не должны использоваться в приложении одновременно. Приложение, применяющее API-интерфейс для определения режима работы курсоров, не может затем выполнить инструкцию Transact-SQL DECLARE CURSOR для запроса нового курсора Transact-SQL. Инструкция DECLARE CURSOR может использоваться только в том случае, если все атрибуты API-курсоров будут установлены в значения по умолчанию.

Если не был запрошен ни Transact-SQL, ни API-курсор, SQL Server целиком возвращает по умолчанию результирующий набор приложению (это называется результирующим набором по умолчанию).

Обработка курсоров

Курсоры Transact-SQL и API-курсоры имеют различный синтаксис, но для всех курсоров SQL Server используется одинаковый цикл обработки.

  1. Связать курсор с результирующим набором инструкции Transact-SQL и задать его характеристики (например, возможность обновления строк).
  2. Выполнить инструкцию Transact-SQL для заполнения курсора.
  3. Получить в курсор необходимые строки. Операция получения в курсор одной и более строк называется выборкой. Выполнение серии выборок для получения строк в прямом или обратном направлении называется прокруткой.
  4. При необходимости выполнить операции изменения (обновления или удаления) строки в текущей позиции курсора.
  5. Закрыть курсор.

См. также

Основные понятия

Типы курсора (компонент Database Engine)
О выборе типа курсора

Другие ресурсы

DECLARE CURSOR (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005