Problemas com Rollback

28/09/2004

0

Boa tarde a todos,

Novamente estou com problemas com o rollback e preciso de ajuda.

O meu scrpit é o seguinte:
CREATE PROCEDURE PNS_Acerta_Base @empresa smallint, @data_exclusao int, @usuario int OUTPUT AS

BEGIN TRANSACTION Acerta_Base
DECLARE @retorno smallint, @id int

segue o script.......


EXEC @retorno = PNS_Corrige_Contrato_Devolucao @empresa, @data_exclusao, @usuario, 0
IF @retorno0
BEGIN
ROLLBACK TRANSACTION Acerta_Base
DROP TABLE #Corrige_Contrato_Devolucao
GOTO FIM
END

SET @retorno = 0
COMMIT TRANSACTION Acerta_Base

FIM:
RETURN(@retorno)

---------------------------------------------------------------

CREATE PROCEDURE PNS_Corrige_Contrato_Devolucao @empresa smallint, @data_exclusao int, @usuario smallint, @controle smallint OUTPUT AS
BEGIN TRANSACTION Contrato_Devolucao

segue script.....

INSERT INTO Cores
SELECT CCD.Cod_Cor, ´SISGEM-Acerto Base´, @usuario
FROM #Corrige_Contrato_Devolucao CCD
WHERE NOT EXISTS (SELECT * FROM Cores WHERE Cores.Cod_Cor = CCD.Cod_Cor)
IF @@error0
BEGIN
ROLLBACK TRANSACTION Contrato_Devolucao
DROP TABLE Corrige_Contrato_Devolucao
IF @controle = 0 SET @retorno = 1
IF @controle = 1 SET @retorno = 7
GOTO FIM
END

DELETE FROM TabelaX
WHERE EXISTS (SELECT * FROM Exclui_Creditos A
WHEREA.Cod_Empresa = TabelaX.Cod_Empresa
ANDA.Num_Devolucao = TabelaX.Num_Devolucao )

IF @@error 0
BEGIN
SET @retorno = 2
ROLLBACK TRANSACTION Contrato_Devolucao
DROP TABLE Corrige_Contrato_Devolucao
GOTO FIM
END


SET @retorno = 0
COMMIT TRANSACTION Contrato_Devolucao

FIM:
RETURN(@retorno)

--------------------------------------------

Quando o erro acontece na PNS_Corrige_Contrato_Devolucao o rollback não acontece .

MENSAGEM DE ERRO DO SQLSERVER:
Server: Msg 6401, Level 16, State 1, Procedure PNS_Corrige_Contrato_Devolucao, Line 51
Cannot roll back Contrato_Devolucao. No transaction or savepoint of that name was found.
Server: Msg 266, Level 16, State 2, Procedure PNS_Corrige_Contrato_Devolucao, Line 235
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 2.

Já verifiquei as proc´s todo begin tran nometal tem o seu rollback tran nometal e/ou commit tran nometal.

Onde estou errando?

Sds,
Roberto


Robertolucio

Robertolucio

Responder

Posts

28/09/2004

Robertolucio

Em tempo,

Na mesma situação se não ocorrer erro o COMMIT é executado, alterando assim a variável @@trancount, que é a que estou utilizando para verificar se o rollback funciona.

Att,
Roberto


Responder

28/09/2004

Marcus.magalhaes

Boa tarde.

Vamos lá...qdo vc usa o Rollback, se vc não fez um save point, não adianta colocar o nome da transação...ele irá fazer rollback de td...Verifique a variávell @@trancount no 2 begin tran...vc verá q ela estará com valor 0.

Se vc quer voltar parcialmente use o save point, assim seu rollback nome_da_tran funcionará do jeito q vc quer.

Att,


Responder

28/09/2004

Robertolucio

Marcos, boa noite.

Novamente obrigado pela solução!

Sds
Roberto


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar