Курсоры (компонент Database Engine)

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

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

  • позиционируясь на отдельные строки результирующего набора;

  • получая одну или несколько строк от текущей позиции в результирующем наборе;

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

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

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

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

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

  • Transact-SQL

    Язык Transact-SQL поддерживает синтаксис для использования курсоров, созданных в соответствии с синтаксисом курсоров ISO.

  • Функции курсоров 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. Закрыть курсор.