Курсоры (компонент 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 используется одинаковый цикл обработки.
Связать курсор с результирующим набором инструкции Transact-SQL и задать его характеристики (например возможность обновления строк).
Выполнить инструкцию Transact-SQL для заполнения курсора.
Получить в курсор необходимые строки. Операция получения в курсор одной и более строк называется выборкой. Выполнение серии выборок для получения строк в прямом или обратном направлении называется прокруткой.
При необходимости выполнить операции изменения (обновления или удаления) строки в текущей позиции курсора.
Закрыть курсор.
См. также