none
Select top1 bloquear registro RRS feed

  • Pergunta

  • Boa tarde pessoal, queria saber se existe alguma maneira no SQL de ao fazer um select top 1 em uma tabela, o registro selecionado não apareça em outras consultas paralelas, dando a sensação que o mesmo foi deletado. 
    sexta-feira, 21 de julho de 2017 20:48

Respostas

  • Bernoulthy,

    Você esta se referindo a possibilidade de gerar um bloqueio do registro?

    Sabe que esta tipo de implementação é muito perigosa e prejudicial a estrutura de seu banco de dados e posteriormente a sua aplicação.

    O que você poderia fazer é trabalhar com o conceito de Níveis de Isolamento de dados existentes no Microsoft SQL Server que são justamente formas de se controlar o acesso e visibilidade de dados e tabelas.

    Agora uma possibilidade que você poderia utilizar é justamente na sua tabela existir um atributo que marque quando o dado esta sendo acessado por um usuário, desta forma, em cada query você adiciona uma condição para que não apresente dados com este atributo definido.

    Para que isso funcione sempre que um dado for acessado você teria que atualizar este status e sempre que o mesmo for liberado você teria que novamente alterar este status.

    Ai eu lhe pergunto até que ponto vale a pena implementar este tipo de condição.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 21 de julho de 2017 23:50
  • Bernouthly,

    cuidado ao usar, mas segue abaixo um exemplo.

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; select * from tabela WITH (XLOCK, ROWLOCK) -- COMMIT TRANSACTION; -- rollback


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)

    sábado, 22 de julho de 2017 00:12

Todas as Respostas

  • Bernoulthy,

    Você esta se referindo a possibilidade de gerar um bloqueio do registro?

    Sabe que esta tipo de implementação é muito perigosa e prejudicial a estrutura de seu banco de dados e posteriormente a sua aplicação.

    O que você poderia fazer é trabalhar com o conceito de Níveis de Isolamento de dados existentes no Microsoft SQL Server que são justamente formas de se controlar o acesso e visibilidade de dados e tabelas.

    Agora uma possibilidade que você poderia utilizar é justamente na sua tabela existir um atributo que marque quando o dado esta sendo acessado por um usuário, desta forma, em cada query você adiciona uma condição para que não apresente dados com este atributo definido.

    Para que isso funcione sempre que um dado for acessado você teria que atualizar este status e sempre que o mesmo for liberado você teria que novamente alterar este status.

    Ai eu lhe pergunto até que ponto vale a pena implementar este tipo de condição.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 21 de julho de 2017 23:50
  • Bernouthly,

    cuidado ao usar, mas segue abaixo um exemplo.

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; select * from tabela WITH (XLOCK, ROWLOCK) -- COMMIT TRANSACTION; -- rollback


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)

    sábado, 22 de julho de 2017 00:12
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 24 de julho de 2017 13:47
    Moderador