Pergunta

Existe uma maneira de bloquear uma linha no banco de dados SQL 2005-2008 sem iniciar uma transação, para que outros processos não podem atualizar a linha até que seja desbloqueado?

Foi útil?

Solução

Você pode usar rowlock ou outras dicas mas você deve estar cuidado ..

A dica HOLDLOCK irá instruir SQL Server para manter o bloqueio até que você confirmar a transação. A dica ROWLOCK irá bloquear apenas este registro e não emitir uma página ou a tabela de bloqueio.

O bloqueio também será lançado se você fechar sua conexão ou que ela expire. Eu ficaria muito cuidado de fazer isso, uma vez que vai parar quaisquer instruções SELECT que atingiram esta mortos linha em suas trilhas. SQL Server tem inúmeras dicas de bloqueio que você pode usar. Você pode vê-los em Books Online quando você procura em ambos HOLDLOCK ou ROWLOCK.

Outras dicas

Tudo que você executar no servidor acontece em uma transação, seja implícita ou explícita.

Você não pode simplesmente bloquear uma linha com nenhuma transação (fazer a linha somente leitura). Você pode fazer o banco de dados somente leitura, mas não apenas uma linha.

Explique o seu propósito e que poderia ser uma solução melhor. níveis de isolamento e dicas de bloqueio e versão de linha .

Você precisa bloquear um linha , ou deveria fechaduras de aplicação do SQL Server fazer o que você precisa?

Uma Aplicação Locks é apenas um bloqueio com um nome que você pode "bloqueio", "desbloqueio" e verificar se ele está bloqueado. veja acima link para mais detalhes. (Eles ficam desbloqueados se sua conexão fica fechado etc, por isso tendem a themselfs limpas up)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top