none
Trigger de monitoria de atualização de registros RRS feed

  • Pergunta

  • Bom dia,

    Estou precisando de uma ajuda com um trigger, preciso que a trigger atualize uma coluna na tabela toda vez que aquela linha sofre alguma atualização,

    preciso guardar a data da ultima atualização feita naquele registro, eu comecei a montar a trigger mas nao consegui terminar ela.

    create trigger UpdateTabelaGeralProdutos on TabelaGeralProdutos 

    after update
    AS
    update TabelaGeralProdutos set DataUltimoUpdate = GETDATE()


    sexta-feira, 2 de março de 2012 14:27

Respostas

  • Bom dia Odair,

    Segue um exemplo simples para atualização da data de um registro quando o mesmo for alterado.

    -- trigger para alteração
    CREATE TRIGGER tru_teste ON teste
    AFTER UPDATE 
    AS
    BEGIN
    UPDATE a
    SET data_alteracao = GETDATE()
    FROM teste a
    INNER JOIN inserted b on b.codigo = a.codigo -- chave primária da minha tabela
    END

    Você deve usar um campo que seja o identificador do seu registro para que a trigger "entenda" qual registro você está querendo atualizar a data.

    Espero ter ajudado.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Marcado como Resposta Odair J. Santos sexta-feira, 2 de março de 2012 17:09
    sexta-feira, 2 de março de 2012 15:50

Todas as Respostas

  • Bom dia Odair,

    Segue um exemplo simples para atualização da data de um registro quando o mesmo for alterado.

    -- trigger para alteração
    CREATE TRIGGER tru_teste ON teste
    AFTER UPDATE 
    AS
    BEGIN
    UPDATE a
    SET data_alteracao = GETDATE()
    FROM teste a
    INNER JOIN inserted b on b.codigo = a.codigo -- chave primária da minha tabela
    END

    Você deve usar um campo que seja o identificador do seu registro para que a trigger "entenda" qual registro você está querendo atualizar a data.

    Espero ter ajudado.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Marcado como Resposta Odair J. Santos sexta-feira, 2 de março de 2012 17:09
    sexta-feira, 2 de março de 2012 15:50
  • Olá Odair,

    Segue um exemplo completo de como fazer sua trigger.

    Por favor, não esqueça de avaliar a resposta.

    abraços.

    IF EXISTS(SELECT NAME FROM SYS.tables WHERE NAME = 'PRODUTO')	
    	DROP TABLE DBO.PRODUTO
    GO
    CREATE TABLE DBO.PRODUTO(
    	ID INT IDENTITY(1,1),
    	PRODUTO VARCHAR(100),
    	STATUS CHAR(1)
    )
    GO
    INSERT INTO DBO.PRODUTO VALUES
    ('TESTE','N'),
    ('TESTE2','N'),
    ('TEST3','S')
    GO
    --TABELA DE LOG
    IF EXISTS(SELECT NAME FROM SYS.tables WHERE NAME = 'TB_UPDATE')	
    	DROP TABLE DBO.TB_UPDATE
    GO
    CREATE TABLE DBO.TB_UPDATE (
     ID INT IDENTITY(1,1),
     CAMPO VARCHAR(100),
     VALOR_ANTIGO VARCHAR(100),
     VALOR_NOVO VARCHAR(100)
    )
    GO
    
    --TRIGGER LOG
    IF EXISTS(SELECT NAME FROM SYS.triggers  WHERE name = 'TG_UPDATE')
    	DROP TRIGGER TG_UPDATE
    GO
    CREATE TRIGGER TG_UPDATE ON PRODUTO
    AFTER UPDATE AS BEGIN
    
    SET NOCOUNT ON
    
    	IF UPDATE(STATUS) BEGIN
    	
    		DECLARE @DELETED_STATUS VARCHAR(100) = (SELECT STATUS FROM inserted)
    		DECLARE @INSERTED_STATUS VARCHAR(100) = (SELECT STATUS FROM deleted)
    	
    		INSERT INTO DBO.TB_UPDATE (CAMPO, VALOR_ANTIGO, VALOR_NOVO) 
    		VALUES ('STATUS',@DELETED_STATUS, @INSERTED_STATUS)
    	END
    END	
    GO
    --EXECUTA UM UPDATE	
    UPDATE TOP(1) PRODUTO SET status = 'N'	
    GO
    --VE OS REGISTROS ALTERADOS
    SELECT * FROM DBO.TB_UPDATE
    



    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com

    sexta-feira, 2 de março de 2012 16:04
  • Obrigado Mariana pela ajuda, seu exemplo me serviu perfeitamente.


    sexta-feira, 2 de março de 2012 17:10