Поделиться через


Курсоры и блокировка

В Microsoft SQL Server Compact 4.0 инструкция SELECT в определении курсора выполняется согласно тем же правилам блокировки транзакций, которыми руководствуются другие инструкции SELECT. Блокировки транзакций, полученные любой инструкцией SELECT, в том числе инструкцией SELECT в определении курсора, управляются следующими элементами.

  • Настройка уровня изоляции транзакций для подключения.

  • Любые подсказки блокировки, указанные в предложении FROM.

В случае с базовой таблицей или курсорами индексов уровень изоляции транзакций может повлиять на получаемые блокировки.

Важно!

При уровне изоляции по умолчанию READ COMMITTED SQL Server Compact 4.0 не осуществляет блокировок при размещении и чтении данных. Курсорам при ЧТЕНИИ ЗАФИКСИРОВАННЫХ ДАННЫХ необходима блокировка Sch-S для защиты стабильности схемы при открытом курсоре. Монопольные блокировки принимаются при изменении данных.

Блокировки удерживаются до завершения текущей транзакции как для курсоров, так и для инструкций SELECT.

Получение блокировок

Хотя в отношении типа блокировок транзакций курсоры подчиняются тем же правилам, что и независимые инструкции SELECT, получение блокировок происходит в разное время. Блокировки, созданные независимой инструкцией SELECT или курсором устанавливаются при запросе строки всегда. Для независимой SELECT получение всех строк происходит при исполнении инструкции. Курсоры получают строки в разное время в зависимости от типа курсора.

  • Статические курсоры получают весь результирующий набор при открытии курсора. Это приводит к блокировке каждой строки результирующего набора во время открытия.

  • Управляемые набором ключей курсоры получают ключи каждой строки результирующего набора при открытии курсора. Это блокирует каждую строку результирующего набора во время открытия.

  • Последовательные курсоры не получают строк, пока те не будут извлечены. Блокировку строки можно получить, только поместив на последнюю курсор.

См. также

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

Типы курсоров

Выбор типа курсора

Неявные преобразования курсора

Обновление курсоров, управляемых набором ключей