Trigger, eventos Insert, Delete e Update

22/05/2003

0

E aí, galera???

Meu problema agora é:

Fiz uma trigger para gerar um log de alteração de uma tabela, funciona, só que de vez em quando ele não faz o update. Eu gostaria de, se for possível, separar os eventos, tenho um livro que diz que isso é possível mas quando tento fazer dá pau.

gostaria de algo assim:

CREATE TRIGGER tr_LogFinanceiro_imob ON dbo.Financeiro_imob
FOR INSERT
AS
instruçao

FOR DELETE
AS
instroção

FOR UPDATE
AS
instrução

Tentei fazer mas ela dá pau no segundo for.
O que eu estou fazendo de errado???


A trigger que eu fiz é assim:

if exists (select * from sysobjects where id = object_id(´dbo.tr_LogFinanceiro_imob´) and sysstat & 0xf = 8)
drop trigger dbo.tr_LogFinanceiro_imob
GO

CREATE TRIGGER tr_LogFinanceiro_imob ON dbo.Financeiro_imob
FOR INSERT,UPDATE,DELETE
AS
/* Cria o trigger para log das operacoes dos usuarios
Na Tabela Financeiro_imob
AUTOR : FLÁVIO SANCHES
DATA : 21/05/2003
*/

-- Declara as variaveis dos campos da tabela onde o trigger atua
Declare
@Inscricao_imob char(6) ,
@chave_ident char(3) ,
@Ano_Divida char(4) ,
@Cod_Divida char(2) ,
@Sub_Divida char(2) ,

@Cod_Tipo_Moeda char(2) ,
@Parcela char(2) ,
@Vencimento DateTime,
@Valor float ,
@Cod_Situacao_Divida char(2) ,
@Num_Termo_Origem char(6) ,
@Ano_Termo_Origem char(4) ,
@Num_Termo_Destino char(6) ,
@Ano_Termo_Destino char(4) ,
@Qtde_Parc_Agrup char(2) ,
@Tem_Composicao char(1)


-- Testa se Tem algum registro na tabela Inserted
If exists(Select inscricao_imob from Inserted)
Begin
-- Testa se Tem algum registro na tabela Deleted
If exists(Select inscricao_imob from deleted)
begin
-- se tem registro em ambas as tabelas entao a operacao e alteracao
-- insere no log o registro antes da operacao

Declare cur_ins Cursor For
Select
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao
from Inserted


Declare cur_del Cursor For
Select
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao
from deleted

Open cur_del
Open cur_ins

While (@@Fetch_Status <> -1)
Begin
Fetch Next From cur_del
Into
@Inscricao_imob ,@Chave_ident ,@Ano_Divida ,@Cod_Divida ,
@Sub_Divida ,@Cod_Tipo_Moeda ,@Parcela ,@Vencimento ,
@Valor ,@Cod_Situacao_Divida ,@Num_Termo_Origem ,@Ano_Termo_Origem ,
@Num_Termo_Destino ,@Ano_Termo_Destino ,@Qtde_Parc_Agrup ,@Tem_Composicao

Insert Into Lg_Financ_imob (
Usuario ,estacao ,Dia_Hora ,Operacao ,
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao
)Values(
Suser_Name() ,Host_Name() ,GetDate() ,´A´ ,
@Inscricao_imob ,@Chave_ident ,@Ano_Divida ,@Cod_Divida ,
@Sub_Divida ,@Cod_Tipo_Moeda ,@Parcela ,@Vencimento ,
@Valor ,@Cod_Situacao_Divida ,@Num_Termo_Origem ,@Ano_Termo_Origem ,
@Num_Termo_Destino ,@Ano_Termo_Destino ,@Qtde_Parc_Agrup ,@Tem_Composicao )

Fetch Next From cur_ins
Into
@Inscricao_imob ,@Chave_ident ,@Ano_Divida ,@Cod_Divida ,
@Sub_Divida ,@Cod_Tipo_Moeda ,@Parcela ,@Vencimento ,
@Valor ,@Cod_Situacao_Divida ,@Num_Termo_Origem ,@Ano_Termo_Origem ,
@Num_Termo_Destino ,@Ano_Termo_Destino ,@Qtde_Parc_Agrup ,@Tem_Composicao

Insert Into Lg_Financ_imob (
Usuario ,estacao ,Dia_Hora ,Operacao ,
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao
)Values(
Suser_Name() ,Host_Name() ,GetDate() ,´A´ ,
@Inscricao_imob ,@Chave_ident ,@Ano_Divida ,@Cod_Divida ,
@Sub_Divida ,@Cod_Tipo_Moeda ,@Parcela ,@Vencimento ,
@Valor ,@Cod_Situacao_Divida ,@Num_Termo_Origem ,@Ano_Termo_Origem ,
@Num_Termo_Destino ,@Ano_Termo_Destino ,@Qtde_Parc_Agrup ,@Tem_Composicao
)
End

Close cur_del
Deallocate cur_del
Close cur_ins
Deallocate cur_ins

End
Else
Begin
-- Se nao tem registro na tabela deleted entao a operacao e de inclusao
Insert Into lg_Financ_imob (
Usuario ,estacao ,Dia_Hora ,Operacao ,
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao )
select
Suser_Name() ,Host_Name() ,GetDate() ,´I´ ,
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao
from inserted

End
End
Else
Begin

-- Se nao tem registro na tabela Inserted entao a operacao e de exclusao
-- Insere no log o registro apagado
Insert Into lg_Financ_imob (
Usuario ,estacao ,Dia_Hora ,Operacao ,
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,

Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao )
select
Suser_Name() ,Host_Name() ,GetDate() ,´E´ ,
Inscricao_imob ,Chave_ident ,Ano_Divida ,Cod_Divida ,
Sub_Divida ,Cod_Tipo_Moeda ,Parcela ,Vencimento ,
Valor ,Cod_Situacao_Divida ,Num_Termo_Origem ,Ano_Termo_Origem ,
Num_Termo_Destino ,Ano_Termo_Destino ,Qtde_Parc_Agrup ,Tem_Composicao
from deleted

End
GO


Flavio Sanches

Flavio Sanches

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