Como criar um gatilho que atualize o campo de data e hora após a modificação da linha?


10

Criei uma tabela testtabledentro do banco de dados testbaseque possui a seguinte estrutura:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

No entanto, como escrevo um gatilho para atualizar a linha específica que foi modificada (ou atualizada com novas informações) e registrar a data da modificação no expire_datecampo e a hora da modificação no expire_timecampo? (ou se isso for possível?)


Você já viu como um gatilho é criado?

sim, observei como o gatilho é criado (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ), mas uma coisa está me incomodando é como inserir o UPDATE declaração para a linha que está sendo gatilho, obtendo a condição corretas como naWHERE id = Changed_Row_ID
Jack

Respostas:


8

Seria bastante fácil, mas eu recomendaria alterar a lógica do comando que está inserindo / atualizando os dados, para que ele adicione as informações adicionais neste momento.

No entanto, se você desejar prosseguir com um gatilho, poderá fazer algo assim:

create trigger my_trigger
on my_table
after insert, update
as
begin
declare @dt datetime = getdate();
update a
set expire_date = CONVERT(DATE, @dt, 101),
    expire_time = CONVERT(TIME, @dt)
from my_table as a
join inserted as b 
on a.product_no = b.product_no; 
end
go  

Isso usa a INSERTEDtabela para descobrir product_noas linhas que foram alteradas / criadas. Você pode descobrir mais sobre gatilhos no link abaixo:

http://msdn.microsoft.com/en-us/library/ms189799.aspx

Espero que isso ajude você.


Eu nunca pensei que o MS SQL realmente formaria uma tabela chamada inserted. Então, isso significa que seria seguro não ter sua própria tabela de banco de dados com nomes como insertede deleted?
Jack

11
Sim, eu recomendaria não ter suas próprias tabelas com esses nomes apenas para confusão evitar ;-)
Mr.Brownstone

na página do manual create trigger, você pode encontrar um link para a página a seguir, descrevendo o uso das tabelas inseridas / excluídas ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.