Уровни изоляции транзакций курсоров
Режим блокировки транзакций для конкретного курсора определяется настройкой параллелизма этого курсора, подсказками блокировки, заданными в инструкции SELECT курсора и параметрами уровня изоляции транзакции.
Microsoft SQL Server поддерживает следующие уровни изоляции транзакций курсора.
Фиксированное чтение
SQL Server получает разделяемую блокировку при чтении строки в курсор, но освобождает блокировку сразу после считывания этой строки. Поскольку запросы разделяемой блокировки блокируются монопольной блокировкой, курсору не удается считать строку, которую другая задача обновила, но еще не зафиксировала. Фиксированное чтение является уровнем изоляции по умолчанию как для SQL Server, так и для ODBC.Незафиксированное чтение
SQL Server не запрашивает блокировки во время считывания строки в курсор и не обращает внимания на монопольные блокировки. Курсоры могут заполняться обновленными, но еще не зафиксированными значениями. Пользователь обходит все механизмы управления блокировками транзакций, существующие в SQL Server.Повторяющееся или сериализуемое чтение
SQL Server запрашивает разделяемую блокировку на каждую строку, которая считывается в курсор, как и в режиме READ COMMITTED, но если курсор открыт внутри транзакции, разделяемая блокировка удерживается до завершения транзакции, а не освобождается после считывания строки. Это равнозначно указанию HOLDLOCK в инструкции SELECT.Моментальный снимок
SQL Server не запрашивает блокировки во время считывания строки в курсор и не обращает внимания на монопольные блокировки. Курсор заполняется значениями, как если бы транзакция была только что открыта. Блокирование прокрутки запрашивается независимо от изоляции моментальных снимков.