Compartilhar via


Níveis de isolamento da transação de cursor

O comportamento de bloqueio da transação de um cursor específico é determinado pela combinação dos comportamentos de bloqueio da configuração da simultaneidade do cursor, quaisquer dicas de bloqueio especificadas no cursor SELECT e opções de nível de isolamento da transação.

O Microsoft SQL Server dá suporte a estes níveis de isolamento da transação de cursor:

  • Leitura confirmada
    O SQL Server adquire um bloqueio de compartilhamento quando está lendo uma linha em um cursor, mas libera o bloqueio imediatamente após a leitura da linha. Como as solicitações de bloqueio compartilhado são bloqueadas por um bloqueio exclusivo, um cursor não pode ler uma linha atualizada por outra tarefa, mas ainda não confirmada. A leitura confirmada é a configuração de nível de isolamento padrão para SQL Server e ODBC.

  • Leitura não confirmada
    O SQL Server não solicita bloqueios na leitura de uma linha em um cursor e não usa nenhum bloqueio exclusivo. Os cursores podem ser populados com valores já atualizados, mas ainda não confirmados. O usuário está ignorando todos os mecanismos de controle de transação de bloqueio no SQL Server.

  • Leitura repetida ou serializável
    O SQL Server solicita um bloqueio compartilhado em cada linha à medida que ela é lida no cursor como em READ COMMITTED, mas se o cursor for aberto dentro de uma transação, os bloqueios compartilhados serão mantidos até o final da transação em vez de serem liberados após a leitura da linha. Isso tem o mesmo efeito que especificar HOLDLOCK em uma instrução SELECT.

  • Instantâneo
    O SQL Server não solicita bloqueios na leitura de uma linha em um cursor e não usa nenhum bloqueio exclusivo. O cursor é populado com os valores a partir da hora em que a transação foi iniciada pela primeira vez. Os bloqueios de rolagem ainda são solicitados, independentemente do uso de isolamento do instantâneo.