locked
Campo datetime c/ getdate() default, como faço para esse campo ser dinâmico? ou seja a cada acesso na base ele muda a dt e hr?? RRS feed

  • Pergunta

  • Bom dia amigos, estou com um problema e não estou conseguindo resolver.

    Tenho um sistema de noticias, e sua base de dados é sql 2000, nele há dois campos, um é para guardar a data e hora que o registro foi criado, outro é para eu saber qual foi a a data e hora da última atualização.
    O campo que me mostra a última atualização ele é um campo datetime, e está configurado por default com a função getdate(), ou seja quando o registro é alterado pela primeira vez ele pega a data e hora e guarda, mas se eu for alterar pela segunda vez ele não altera, nem a data nem a hora, ele fica com a data e hora da primeira atualização.

    ou seja preciso deixar esse campo auto-atualizável, como faço?????

    domingo, 7 de setembro de 2008 14:55

Todas as Respostas

  • Bom Dia,

     

    O uso do DEFAULT só tem efeito quando o registro é criado, ou seja, para instruções de INSERT. Se a idéia é manter essa coluna quando ocorrer um UPDATE, você terá que utilizar uma trigger. Ex:

     

    Code Snippet

    -- Cria a tabela

    CREATE TABLE tbl (

    CODIGO INT,

    Nome VARCHAR(20),

    DataCriacao DATETIME DEFAULT GETDATE(),

    DataAtualizacao DATETIME DEFAULT GETDATE())

    GO

     

    -- Cria a trigger

    CREATE TRIGGER trg ON tbl

    FOR UPDATE

    AS

    BEGIN

    UPDATE tbl SET DataAtualizacao = GETDATE()

    FROM tbl

    INNER JOIN INSERTED ON tbl.CODIGO = INSERTED.Codigo

    END

    GO

     

    -- Insere um registro

    INSERT INTO tbl (CODIGO, Nome) VALUES (1, 'Nome 1')

    -- Aguarda 10 segundos

    WAITFOR DELAY '00:00:10'

    -- Atualiza o registro

    UPDATE tbl SET Nome = 'N1' WHERE Codigo = 1

     

    -- Verifica os valores

    SELECT DataCriacao, DataAtualizacao

    FROM tbl

    WHERE CODIGO = 1

     

     

    Honestamente não sou muito adepto do uso da trigger para esse tipo de operação. Veja que se são necessários duas ações para que o registro esteja com a data atualizada. Se sua aplicação passar a data correta, será necessário apenas um UPDATE. O acesso será mais eficiente com certeza do que através de uma trigger. Considere colocar essa lógica em sua aplicação se possível.

     

    [ ]s,

     

    Gustavo

    domingo, 7 de setembro de 2008 15:41
  •  

    ok muito obrigado pela resposta, eu não sabia que o default só grava uma vez.
    eu também acho melhor eu colocar uma instrução amais la na minha página de update da notícia fica mais fácil, do que ja deixar direto no banco.
    valeu pela ajuda muito obrigado.

    domingo, 7 de setembro de 2008 18:11