Usuário com melhor resposta
Problema com trigger

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
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
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
-