Pessoal, Bom Dia!
Estou com dificuldade de concorrência no SQL Server.
Sei que no MySQL resolvo utilizando o FOR UPDATE (travando a linha selecionada e executando o Update), evitando que outra pessoa acesse a mesma informação.
Como é no SQL SERVER?!
Pesquisei e verifiquei que preciso utilizar with (rowlock) ou with (updlock) ou with (TABLOCK)… entre outros enfim…
Não consegui atribui essa função de forma que funcionei como o FOR UPDATE do MySQL.
Alguém pode me ajudar com essa solução?!
Existe alguma outra forma que posso resolver esse meu problema?!
Obrigado
Consegui resolver esse problema criando uma procedure (SELECT + UDPATE), funcionou perfeitamente!
De qualquer forma fiquei curioso em saber como utilizar esses comandos no SQL Server (WITH - UDPLOCK, ROWLOCK…)
Valewww Galera!
Bom dia, poderia me ensinar como resolveu?
Estou tendo o mesmo problema e não consegui entender a sua lógica (SELECT + UDPATE)
Agradeço desde já.
André, Boa tarde!
Segue a minha solução que me ajudou, funciona no MySQL ok
SELECT * FROM TbDados FOR UPDATE;
UPDATE Tbdados where Id = 1;
Abraço
Obrigado, mas no SQL Server 2008 não está funcionando, fica dando deadlocked o tempo todo e o ID fica alterando cada vez que eu rodo o UPDATE
AndreGodoi, como informei o código apresentado é para o MySQL.
SELECT * FROM TbDados FOR UPDATE;
UPDATE Tbdados where Id = 1;
No SQL Server é diferente, eu precisei de ajudando de um amigo DBA, veja o que fiz:
/Inicio - Criar um Procedure/
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRAN
BEGIN TRY
/Logica selecionar e registrar que está em uso/
UPDATE TbDados SET StStatus = ‘Em Uso’, CdUser = 1 WHERE Id = (SELECT TOP 1 Id FROM TbDados) ;
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
SELECT * FROM TbDados Where StStatus = ‘Em Uso’ AND CdUser = 1
/Fim/
Espero que consiga resolver seu problema!
Até mais…