none
Problema com trigger RRS feed

  • Pergunta

  • Pessoal, boa tarde.

    Alguém consegue ajudar a minha intenção com a trigger abaixo, seria gerar um log de cada campo que fosse alterado e o que ocorre é exatamente o contrário, quando altero um único campo, todos os demais campos que está sendo considerado na trigger também eh alterado. veja.

    create trigger trg_Paciente_Atualizar on TD_Paciente FOR UPDATE AS 
    BEGIN
       IF (UPDATE(Estado_Civil))
       BEGIN
        INSERT INTO tabela_log (ukey_paciente, ukey_login, data, acao,antigo,novo)
        SELECT DELETED.UKEY, DELETED.UKEY_TD_LOGIN, GETDATE(), 'UPDATE', deleted.ESTADO_CIVIL,INSERTED.ESTADO_CIVIL
        FROM INSERTED INNER JOIN DELETED ON INSERTED.UKEY = DELETED.UKEY
    		WHERE  INSERTED.UKEY = DELETED.UKEY
       END;
    
      IF (UPDATE(Profissao))
       BEGIN
        INSERT INTO tabela_log (ukey_paciente, ukey_login, data, acao,antigo,novo)
        SELECT DELETED.UKEY, DELETED.UKEY_TD_LOGIN, GETDATE(), 'UPDATE', deleted.PROFISSAO,INSERTED.PROFISSAO
        FROM INSERTED INNER JOIN DELETED ON INSERTED.UKEY = DELETED.UKEY
    		WHERE  INSERTED.UKEY = DELETED.UKEY
       END;
      END;
      

    Desde já agradeço,


    Abs, Adriano_SP

    terça-feira, 7 de maio de 2013 15:24

Respostas

  • Adriano,

    Acredito que o mais indicado para você seja utilizar o Change Data Capture ou Change Tracking, pois ambos os recursos foi criados especificamente para esta necessidade.

    Veja se este exemplo ajuda:

     --Criando a Table de Novos Produtos--
    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(10))
    
    --Criando a Table de Histórico Novos Produtos--
    Create Table HistoricoNovosProdutos
     (Codigo Int,
       Descricao VarChar(10))
    Go
    
    --Inserindo valores --
    Insert Into Novosprodutos Values('Arroz')
    Insert Into Novosprodutos Values('Arroz1')
    Insert Into Novosprodutos Values('Arroz2')
    Insert Into Novosprodutos Values('Arroz3')
    Go
    
    --Criando a Trigger para controle de histórico--
    Create TRIGGER T_Historico
    ON NovosProdutos
    for update
    AS 
     IF (Select Descricao from Inserted) <> (Select Descricao from Deleted)
      BEGIN
       INSERT Into HistoricoNovosProdutos (Codigo, Descricao)
            SELECT Codigo, Descricao FROM INSERTED
      END
    Go
    
    --Fazendo os teste --
    
    
    Update NovosProdutos
    Set Descricao='Arroz 4'
    Where Codigo = 1
    Go
    
    Update NovosProdutos
    Set Descricao='Arroz1'
    Where Codigo = 2
    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Adriano_SP terça-feira, 7 de maio de 2013 19:22
    terça-feira, 7 de maio de 2013 18:14

Todas as Respostas

  • Adriano,

    Acredito que o mais indicado para você seja utilizar o Change Data Capture ou Change Tracking, pois ambos os recursos foi criados especificamente para esta necessidade.

    Veja se este exemplo ajuda:

     --Criando a Table de Novos Produtos--
    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(10))
    
    --Criando a Table de Histórico Novos Produtos--
    Create Table HistoricoNovosProdutos
     (Codigo Int,
       Descricao VarChar(10))
    Go
    
    --Inserindo valores --
    Insert Into Novosprodutos Values('Arroz')
    Insert Into Novosprodutos Values('Arroz1')
    Insert Into Novosprodutos Values('Arroz2')
    Insert Into Novosprodutos Values('Arroz3')
    Go
    
    --Criando a Trigger para controle de histórico--
    Create TRIGGER T_Historico
    ON NovosProdutos
    for update
    AS 
     IF (Select Descricao from Inserted) <> (Select Descricao from Deleted)
      BEGIN
       INSERT Into HistoricoNovosProdutos (Codigo, Descricao)
            SELECT Codigo, Descricao FROM INSERTED
      END
    Go
    
    --Fazendo os teste --
    
    
    Update NovosProdutos
    Set Descricao='Arroz 4'
    Where Codigo = 1
    Go
    
    Update NovosProdutos
    Set Descricao='Arroz1'
    Where Codigo = 2
    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Adriano_SP terça-feira, 7 de maio de 2013 19:22
    terça-feira, 7 de maio de 2013 18:14
  • Valeu Junior Galvão!! Obrigado!


    Abs, Adriano_SP

    terça-feira, 7 de maio de 2013 19:22