none
Trigger para Controle de Log com varios campos RRS feed

  • Pergunta

  • Prezado(a)s depois de fazer alguns levantamentos sobre o assunto cheguei a conclusao de que para melhor controlar as alterações de campos de uma tabela seria por Triggres. Bom, no primeiro momento fiz para uma tabela pequena (um campo) e funcionou. Agora estou com uma tabela maior, contrui a trigger da forma que achava correto, porem o resultado foi decepcionante. Gostaria de que ao salvar a tabela a trigger verificaria quais campos foram alterados e inserisse na tabel, porem da forma que fiz ele sempre vai alterar tudo. Segue abaixo a Tabela e a trigger feita, que puder me ajudar

    TABELA

    create table ControleLog.Empresalog (
     IdEmpresaLog int identity constraint pk_IdEmpresaLog primary key,
     IdEmpresa int not null constraint fk_IdEmpresaLog references Pessoa.Empresa(IdEmpresa),
     IdRegiaoDe int,
     IdRegiaoPara int,
     IdAtividadeRamoDe int,
     IdAtividadeRamoPara int,
     IdPatronalDe int,
     IdPatronalPara int,
     NumFuncionariosDe int,
     NumFuncionariosPara int,
     IdContabilidadeDe int,
     IdContabilidadePara int,
     FormaPagamentoDe int,
     FormaPagamentoPara int,
     DataBaseSindicalDe int,
     DataBaseSindicalPara int,
     DataAlteracaoEmpresaLog datetime not null,
     IdUsuarioAlteracao int not null
     )
    go

    Trigger

    create trigger trg_EmpresaLog on Pessoa.Empresa for update
     as Begin
     Declare
      @IdEmpresa int,
      @IdRegiaoDe int,
      @IdRegiaoPara int,
      @IdAtividadeRamoDe int,
      @IdAtividadeRamoPara int,
      @IdPatronalDe int,
      @IdPatronalPara int,
      @NumFuncionariosDe int,
      @NumFuncionariosPara int,
      @IdContabilidadeDe int,
      @IdContabilidadePara int,
      @FormaPagamentoDe int,
      @FormaPagamentoPara int,
      @DataBaseSindicalDe int,
      @DataBaseSindicalPara int;
     Select --Campos que serão alterados
      @IdRegiaoDe = IdRegiao,
      @IdAtividadeRamoDe = IdAtividadeRamo ,
      @IdPatronalDe = IdPatronal ,
      @NumFuncionariosDe = NumFuncionarios,
      @IdContabilidadeDe = IdContabilidade ,
      @FormaPagamentoDe =FormaPagto ,
      @DataBaseSindicalDe = DataBaseSindical
     from
      deleted ;
      
     Select
      @IdEmpresa = IdEmpresa,
      @IdRegiaoPara = IdRegiao,
      @IdAtividadeRamoPara = IdAtividadeRamo,
      @NumFuncionariosPara =NumFuncionarios ,
      @IdContabilidadePara = IdContabilidade ,
      @FormaPagamentoPara = FormaPagto ,
      @DataBaseSindicalDe = DataBaseSindical
     from
      inserted ;
     
     if (@IdRegiaoDe <> @IdRegiaoPara) or
      (@IdAtividadeRamoDe  <> @IdAtividadeRamoPara) or
      (@IdPatronalDe <> @IdPatronalPara) or
      (@NumFuncionariosDe <> @NumFuncionariosPara) or
      (@IdContabilidadeDe <> @IdContabilidadePara) or
      (@FormaPagamentoDe <> @FormaPagamentoPara) or
      (@DataBaseSindicalDe <> @DataBaseSindicalPara)
      Insert into ControleLog.Empresalog (
       IdEmpresa,
       IdRegiaode,
       IdRegiaoPara ,
       IdAtividadeRamode,
       IdAtividadeRamoPara ,
       IdPatronalDe,
       IdPatronalPara,
       NumFuncionariosDe,
       NumFuncionariosPara,
       IdContabilidadeDe,
       IdContabilidadePara ,
       FormaPagamentoDe ,
       FormaPagamentoPara ,
       DataBaseSindicalDe ,
       DataBaseSindicalPara ,
       DataAlteracaoEmpresaLog ,
       IdUsuarioAlteracao
      )
      Values(
       @IdEmpresa ,
       @IdRegiaoDe ,
       @IdregiaoPara,
       @IdAtividadeRamoDe ,
       @IdAtividadeRamoPara ,
       @IdPatronalDe ,
       @IdPatronalPara ,
       @NumFuncionariosDe ,
       @NumFuncionariosPara ,
       @IdContabilidadeDe ,
       @IdContabilidadePara ,
       @FormaPagamentoDe ,
       @FormaPagamentoPara ,
       @DataBaseSindicalDe ,
       @DataBaseSindicalPara ,
       GETDATE(),
       1
      )
     end
    go

    Contando com a atenção de sempre

     


    Marcelo Nogueira
    sábado, 6 de agosto de 2011 18:46

Respostas

Todas as Respostas