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.