none
Trigger para atualizar registros RRS feed

  • Pergunta

  • Boa tarde!

    Sei que essa dúvida deve ser muito boba; mas gostaria da ajuda de vocês sendo que nunca trabalhei com triggers.

    Estou precisando desenvolver uma trigger que ao atualizar uma tabela ela atualize registros de outra tabela.

    Seria basicamente assim:

    Na tabela de funcionários eu possuo o campo CPF e STATUS

    porém quando houvesse uma atualização desses campos na tabela de funcionários a tabela de histórico seria atualizada esses dois campos também

    Alguém poderia me ajudar?

    quinta-feira, 1 de dezembro de 2016 17:12

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 1 de dezembro de 2016 21:36
    • como se relacionam as tabelas de funcionários e de histórico? - Através do campo Matricula
    • qual o nome correto das tabelas? - Funcionários e Histórico
    • como será a atualização da tabela histórico: incluir nova linha para cada coluna alterada ou atualizar linha já existente? - Apenas vai atualizar o campo CPF e Status da tabela de histórico
    • é para registrar na tabela de histórico somente o novo valor ou deve-se registrar o anterior e o novo valor? - Apenas atualizar o campo CPF e STATUS quando houver atualização na tabela de funcionários.

    Através do seu esboço tentei montar algo mais nao funcionou.
    Poderia me ajudar novamente?

    Estou dando uma lida no material e tentando montar.
    Creio que deve ser bem simples, mas pela falta de conhecimento se torna complicada.:(

    -- código #1
    CREATE TRIGGER 
       on Funcionário
       after update as
    begin
    
    -- verifica se há linhas para processar
    declare @NL tinyint, @MATRICULA INT, @STATTUS CHAR(1);
    set @NL= (SELECT Count(*) from (SELECT top (2) * from INSERTED) as I);
    IF @NL = 0
    
     return;
    
    -- verifica se o comando que ativou o gatilho altera as colunas CPF e/ou STATUS
    IF not UPDATE(CPF) and not UPDATE(STATUS)
    Select @MATRICULA= MATR, @STATTUS=STATTUS From Inserted
      return;
    
    -- atualiza tabela de histórico
       UPDATE historico
        SET cpf  = @CPF, STATUS_=@STATUS
    	WHERE MATR= @MATRICULA
    
    end;
    go

    sexta-feira, 2 de dezembro de 2016 12:09
  • Carine,

    Recomendo remover as linhas que correspondem ao comando Return, poderá este tipo de implemantação é obrigatória em funções e somente em procedures que retornam valores inteiros.

    No caso do uso de trigger isso não é necessário.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 2 de dezembro de 2016 13:39
  • Poderia me ajudar na montagem ? Ainda não está funcionando.
    sexta-feira, 2 de dezembro de 2016 14:33
  • Deleted
    • Marcado como Resposta carine.couto sexta-feira, 2 de dezembro de 2016 16:40
    • Não Marcado como Resposta carine.couto terça-feira, 3 de janeiro de 2017 16:28
    • Marcado como Resposta carine.couto terça-feira, 3 de janeiro de 2017 16:29
    sexta-feira, 2 de dezembro de 2016 15:35
  • Muito obrigada!

    Funcionou perfeitamente.

    sexta-feira, 2 de dezembro de 2016 16:41
  • Deleted
    sexta-feira, 2 de dezembro de 2016 19:31
  • Foi apenas uma analogia a uma atividade que vai ser executada no sistema.

    Obrigada Por sua atenção.

    terça-feira, 3 de janeiro de 2017 16:30