Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WellingtonSilva

Uso de begin transaction - commit - rolback

Recommended Posts

Amigos,

 

O uso dos comandos begin transaction, commit e rollback é essencial nas transações?

 

Exemplo:

begin transaction
     update TABELA set CAMPO='conteudo' where ID = 1 
commit

if @@ERROR = 0
   commit
else
   rollback
end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essencial não seria a palavra, pois depende de cada ambiente e criticidade do processo.

 

Olhe um exemplo:

 

 

 
begin try
begin tran
 
  select 1/0
 
   commit tran;
end try
 
begin catch 
select
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() as ErrorState,
ERROR_PROCEDURE() as ErrorProcedure,
ERROR_LINE() as ErrorLine,
ERROR_MESSAGE() as ErrorMessage; 
 
rollback tran;
 
end catch
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O exemplo clássico

 

Transferência de dinheiro da CC para a poupança

 

Grosso modo

update cc set saldo = saldo - 100 where conta = 1;
update poupanca set saldo = saldo + 100 where conta = 1;

Concorda que a "coisa" deve ser única, se por acaso o 2º update falhar , 100 reais iriam "sumir", para casos assim se faz uso de transactions.

 

O rollback defaz TODAS as operações e o COMMIT as confirma

 

Recomendo ler a documentação do BD em questão para ver a melhor forma de tratar isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, obrigado pelas respostas A.Jr e Motta

 

 

 

Concorda que a "coisa" deve ser única, se por acaso o 2º update falhar , 100 reais iriam "sumir", para casos assim se faz uso de transactions.

 

Então Motta, é por isso mesmo que vim até vocês falar sobre transactios, no meu trabalho eu uma base "hibrida", uma parte das informações estão em tabelas DBF e outras em SQL, só que a exclusão dos dados se dá pela consulta na tabela DBF, com isso eu recupero o ID e deleto os dados no SQL, como são várias tabelas a serem tratadas eu tenho de utilizar vários deletes:

delete from Tabela1 where ID = ID
delete from Tabela2 where ID = ID
delete from Tabela3 where ID = ID
delete from Tabela4 where ID = ID
delete from Tabela5 where ID = ID
delete from Tabela6 where ID = ID
delete from Tabela7 where ID = ID

Todas as tabelas estão relacionadas por um mesmo ID. Então como o Motta disse se não tiver o uso do transaction eu corro o risco de DELETAR de uma tabela e das outras não, Correto?

 

Se me permitem já vou aqui tirar outra dúvida: Esta forma que estou utilizado o delete em várias tabelas esta correto, ou eu tenho uma outra forma para fazer isso de forma mais "tranquila".

 

Grande abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei que está implementado mas se poderia obter a "lista" dos ids a serem deletados e fazer algo do tipo

delete from Tabela1 where ID in (1,2,3,5,8,13,21)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

A ideia não é excluir vários registros de uma única tabela, mas sim um único ID, por exemplo: ID = 10.

Eu tenho que excluir este ID de VÁRIAS tabelas, por isso eu coloquei como exemplo vários deletes.

 

Grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

de fato .... não atentei à isto .

 

não, não tem jeito um delete para cada tabela e seria o caso de transação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.