如何创建触发器,以在修改行时更新日期字段和时间字段?


10

testtable在数据库内部创建了一个testbase具有以下结构的表:

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

但是,我该如何编写触发器以使其将更新已修改(或用新信息更新)的特定行,并将修改日期记录到expire_date字段中,并将修改时间记录到expire_time字段中?(或者这是否可行?)


您是否看过触发器的创建方式?

是的,我已经研究了触发器的创建方式(参考:msdn.microsoft.com/en-us/library/ms189799 (v= sql.105 ) .aspx),但令我困扰的是,如何插入一个UPDATE通过使条件正确而触发的行的语句,如WHERE id = Changed_Row_ID
Jack

Answers:


8

这将是相当容易的,但是我实际上建议更改插入/更新数据的命令的逻辑,以便此时添加更多信息。

但是,如果希望继续使用触发器,可以执行以下操作:

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  

这将使用该INSERTED表查找product_no已更改/创建的行。您可以在以下链接中找到有关触发器的更多信息:

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

我希望这可以帮助你。


我从没想过MS SQL实际上会形成一个名为的表inserted。因此,这是否意味着不拥有自己的数据库表以具有诸如inserted和这样的名称是安全的deleted
2012年

1
是的,我建议您不要使用带有这些名称的表格,以免造成混淆;-)
Mr.Brownstone先生2012年

在创建触发器手册页,你可以找到一个链接到以下页面描述使用插入/删除表格(msdn.microsoft.com/en-us/library/ms191300.aspx
miracle173
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.