Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

função rollback

10 views
Skip to first unread message

sara

unread,
May 17, 2006, 2:08:01 PM5/17/06
to
Boa tarde...
Alguem poderia me ajudar???
preciso dar um rollback dentro de uma trigger, porém ocorre um insert em
uma tabela dentro da trigger, e precisava que o rolback não desfizesse esta
inserção.

Aguardo....

Marcelo Colla

unread,
May 17, 2006, 2:12:33 PM5/17/06
to
sara crie uma transacao nomeada

Begin transaction nomequalquer

depois de um rollback nomequalquer

Abs.
"sara" <sa...@discussions.microsoft.com> escreveu na mensagem
news:E2F8922D-F9AA-43A0...@microsoft.com...

Andre Hass

unread,
May 17, 2006, 2:16:02 PM5/17/06
to
Vc tem que colocar um condição para que ele faça ou não o Rollback
--
Abraços
Andre Hass
Http://www.ms-it.com.br


"sara" escreveu:

sara

unread,
May 17, 2006, 3:55:02 PM5/17/06
to
oi Marcelo. Obrigada, mas já tentei desta forma. o problema é que eu quero
dar um rollback na transação toda exceto em um insert . ai dei um begin tran
teste e apos o insert um commit tran teste, porem ele não realmente
"commitado", porque quando o rollback tran(geral, na verdade ocorre no
raisererror) ocorre. ele da um rollback ate no que commitei em cima.

Marcelo Colla

unread,
May 18, 2006, 6:18:42 AM5/18/06
to
e se vc. mudar a sequencia, do commit/rollback ? pode colocar seu codigo
para gente ver ?

"sara" <sa...@discussions.microsoft.com> escreveu na mensagem
news:9A03FD56-D9DE-4256...@microsoft.com...

sara

unread,
May 18, 2006, 7:56:02 AM5/18/06
to
oi marcelo o codigo segue abaixo:

CREATE TRIGGER ola ON [dbo].[AGEMP]
for INSERT
AS

declare @cgc_bom varchar(20),@cod_emp varchar(15)
select @cgc_bom = cgc,@cod_emp = cod_emp from inserted


set @cgc_bom = replace(@cgc_bom,'-','')
set @cgc_bom = replace(@cgc_bom,'.','')
set @cgc_bom = replace(@cgc_bom,'/','')
set @cgc_bom = replace(@cgc_bom,' ','')


-- marcar o cliente que esta seno inserido duplicado pelo CPF e que tenha
codigo diferente
if exists(select inserted.cod_emp from inserted,agemp where inserted.cgc =
agemp.cgc and inserted.cod_emp <> agemp.cod_emp)
begin

update agemp set verificar = 'deletar' from agemp,inserted where
agemp.cod_emp = inserted.cod_emp
DECLARE @TESTE1 VARCHAR(50)
set @teste1= (select top 1 hostname from MASTER..sysprocesses where
loginame = system_user)
if not exists (select cpf from aux_ind
where hostname = @TESTE1)
begin
declare @teste varchar(50),@mensagem varchar(100),@cpf varchar(20),@qtde
VARCHAR (7)

--select @QTDE = (SELECT QTDE FROM MASTER..TB_UNIAO_SERVERS)
set @cpf = (select top 1 INSERTED.cgc from inserted )

-- minha intenção aqui é que no rollback tran não seja disfeito essa
inserção.

begin tran salvar
insert into aux_ind (CPF,Hostname) values(@cpf ,@teste1)
commit tran salvar
set @MENSAGEM = ' ATENÇÃO, CPF/CNPJ '+@cpf+' JÁ CADASTRADO NA BASE
'+@qtde+' VEZES/ POSSIVEL VENDA INDEVIDA'
-- transação desfeita
RAISERROR (@MENSAGEM,16,1)
ROLLBACK TRANSACTION

end
end
ELSE
-- Verificar vendas indevidas na base atual comparando com uma base completa
de vendas
if exists(select s.matchcode from master..tb_uniao_servers s where
@cgc_bom = s.matchcode)
begin
update agemp set verificar = 'indevida' from agemp,inserted where
agemp.cod_emp = inserted.cod_emp
DECLARE @TESTE3 VARCHAR(50)
set @teste3= (select top 1 hostname from MASTER..sysprocesses where
loginame = system_user)
if not exists (select cpf from aux_ind
where hostname = @TESTE3)
begin
declare @teste2 varchar(50),@mensagem2 varchar(100),@cpf2
varchar(20),@qtde2 VARCHAR (7)

--select @QTDE2 = (SELECT QTDE FROM MASTER..TB_UNIAO_SERVERS)
set @cpf2 = (select top 1 INSERTED.cgc from inserted )
begin tran salvar1
insert into aux_ind (cpf,hostname) values (@cpf2,@teste3)
commit tran salvar1
set @MENSAGEM2 = ' ATENÇÃO, CPF/CNPJ .........'+@cpf2+' JÁ CADASTRADO
NA BASE '+@qtde2+' VEZES/ POSSIVEL VENDA INDEVIDA'
RAISERROR (@MENSAGEM2,16,1)
ROLLBACK TRANSACTION


end
END

luizrt...@gmail.com

unread,
Mar 11, 2014, 4:06:31 PM3/11/14
to
Utilize o SAVEPOINT para marcar a posicao do seu ROLLBACK.
0 new messages