locked
TRIGGER para update, log dos dados anteriores ao update RRS feed

  • Pergunta

  • ola pessoal

    a duvida é a seguinte

    quero que qdo alguem altere os dados de uma tabela seja inserido os dados anteriores ao update

    por exemplo

     

    tenho a tabela teste

    CREATE TABLE Teste (
    ID int,
    nome varchar (50)
    )
    insert into teste values (5,'velho')

    caso eu faco um update

    update teste
    set nome = 'alterado'
    where id = 5

    eu quero que o valor da tabela teste (5,velho) seja inserido em outra tabela para eu ter um controle das modificacoes. isso é possivel?

    li sobre o IF UPDATE(nome)

    porem eu tenho muitas colunas na tabela, entao quero a qualquer modificacao em qualquer coluna

     

    acho que é so
    T+ pessoal

    falow

     

    sexta-feira, 8 de setembro de 2006 16:54

Todas as Respostas

  • Krusst,

    Create Trigger T_Atualizar

    For Update

    On SuaTeste

    As

     Set NoCount On

      Insert Into Teste2

      Select Nome From Teste Inner Join Inserted

                                                  On Teste.Id = Inserted.Id

    sexta-feira, 8 de setembro de 2006 19:01
    Moderador
  • vc pode fazer referencia a tabela DELETED...  se quizer eu monto um exemplo para vc....

     

    abs

     

    segunda-feira, 11 de setembro de 2006 20:08
  • ola andre

    se tu puder mandar um exemplo eu agradeço
    T+ cara e obrigado novamente

    terça-feira, 12 de setembro de 2006 12:14
  • Krusst,

     

    O exemplo que eu te passei não ajudou?

    terça-feira, 12 de setembro de 2006 12:34
    Moderador
  • Um pouco

    o problema é que ele insere o valor que o usuario esta cadastrado na hora e nao o valor antigo.

    por exemplo se o nome era "nome1"  e o usuario vai alterar para "nome2" eu preciso que guarde o valor "nome1" na tabela de historico.

     

    mais value junior, com o seu codigo eu tenho um pouco de redundancia, mais tenho o historico que preciso

    mais se conseguir dessa outra forma como te disse, eu nao tenho mais essa redundancia...

     

    falow cara t+
    e obrigado

    terça-feira, 12 de setembro de 2006 12:59
  • Krusst,

    Realmente se você trabalhar com a table Inserted vai acontecer esta caso de ter o novo valor e não o velho.

     

    Mas como o André observou a table Deleted pode te ajudar.

     

    Se precisar estou a disposição.

    terça-feira, 12 de setembro de 2006 13:10
    Moderador
  • so uma duvida

    AO fazer o update o valor antigo é considerado "deleted"?

    se eu pegar o valor deleted ou ter o valor antigo?

    desculpa perguntar e nao testar mais nesse momento nao estou no pc

    so mais tarde que vou mecher nisso.

    Falow e obrigado
    T+

    terça-feira, 12 de setembro de 2006 13:22
  • Krusst,

    Quando se faz um Update você pode utilizar tanto a Inserted com a Deleted, no caso de se recuperar o valor antigo ele esta armazenado na Deleted no novo na Inserted.

    terça-feira, 12 de setembro de 2006 13:47
    Moderador
  • Obrigado Junior e Andre

    conseguir fazer o que queria.
    segue o codigo de como fico.

    CREATE TRIGGER TR_Teste
    On Teste
    For Update
    As
    Set NoCount On

    Insert Into Teste_hist
    Select Deleted.id,Deleted.Nome
    From  Teste Inner Join Deleted On
     Teste.Id = Deleted.Id

     

    obrigado pela ajuda dos 2
    e T+
    FALOW

    terça-feira, 12 de setembro de 2006 14:21