Usuário com melhor resposta
Rollback&Commit

Pergunta
-
boa noite estou tentando fazer uma SP que deve fazer um update conforme os parametros enviados, e gostaria de controlar a transação, mas a impressao que da é que mesmo que eu force um erro de valor da chave primaria a SP não faz o rollback, segue abaixo o script: create procedure sp_update @tempo int, @nome char(10), @chave int as begin transaction update teste set PendDados=@tempo, TTempoNJustif=@nome where cod_teste = @chave if @@error <>0 begin rollback transaction print 'Falhou' end else begin commit transaction print 'Gravou' end porque o SQL não retorna erro? Ats. Wellington L. da Silva
domingo, 8 de outubro de 2006 20:33
Respostas
-
e que na verdade nao falhou, apenas nao atualizou ou seja nao existe o erro, para tratar o erro se for atualizado use:
Declare @LinhasAtt int
depois do update
Select @LinhasAtt = @@rowcount
entao teste o valor de @LinhasAtt se ele for > 0 ele atualizou linhas....
Abs;
quarta-feira, 11 de outubro de 2006 10:12
Todas as Respostas
-
qual erro esta dando ? o sql nao retorna a mensagem de chave ducplicada ?
Abs;
segunda-feira, 9 de outubro de 2006 10:08 -
Bom dia Marcelo,
A impressão que dá, é que ele não respeita o " if @@error <> 0 " pois ele não informa que commitou na base ,e se eu forçar um erro duplicando a chave ou passando como parâmetro uma chave que não existe ele também não me retorna nada. (quando falo que ele não me retorna nada é o print que faço dentro da estrutora de decisão if...else, como Gravou ou Falhou. Para que eu possa controlar a transação.)
Ats.
Wellington L. da Silva
terça-feira, 10 de outubro de 2006 12:31 -
fiz o teste e rodou
Create table TEste (cod_teste int, TTempoNJustif char(10), PendDados int)
insert into TEste (cod_teste, TTempoNJustif, PendDados) Values (1,'TT',1)
create procedure sp_update
@tempo int, @nome char(10), @chave int
as
begin transaction
update teste
set PendDados=@tempo, TTempoNJustif=@nome
where cod_teste = @chave
if @@error <>0
begin
rollback transaction
print 'Falhou'
end
else
begin
commit transaction
print 'Gravou'
endsp_update 1,'teste',1
(1 row(s) affected)
Gravou
onde vc. quer pegar esse erro ?, no query analiser ?
terça-feira, 10 de outubro de 2006 16:34 -
Boa Noite Marcelo,
isso estou tentando fazer no QA pois não será eu que programarei e sim uma outra pessoa só estou fazendo a modelagem de dados, as tabelas as sp's e triggers conforme eles vao me pedindo eu lhes envies o primeiro código e eles disseram que não retornava então teste no QA e realmente não voltava o print parecendo que ele iguinorava o if...else por exemplo quando vc cadastrou o 1, 'teste', 1 se eu tentar fazer um update que não funcionaria como sp_update 1, 'teste', 5 ele não me retorna o Falhou em vez disso ele me retorna o seguinte:
(0 row(s) affected)
Gravou
Ele não deveria trazer o Falhou? Pois não existe a chave de valor 5 ou seja nenhuma alteração foi feita conseguentemente houve um rollback mais o print continua me informando que gravou!
Vou tentar novamente. Se consegui eu dou um toque. rss rss
Wellington L. da Silva
quarta-feira, 11 de outubro de 2006 03:48 -
e que na verdade nao falhou, apenas nao atualizou ou seja nao existe o erro, para tratar o erro se for atualizado use:
Declare @LinhasAtt int
depois do update
Select @LinhasAtt = @@rowcount
entao teste o valor de @LinhasAtt se ele for > 0 ele atualizou linhas....
Abs;
quarta-feira, 11 de outubro de 2006 10:12 -
Bom dia Marcelo,
Valeu, muito obrigado. Este seu último script funcionaou belezinha.
Wellington L. da Silva
quarta-feira, 11 de outubro de 2006 11:21