要求:修改主表中某個字段的值,自動更新子表中的某個字段.net
咱們爲了避免更改程序,建立一個update觸發器。事件
create trigger [tig_update] on 表名
after update
as
declare @id int
begin
if (update(主表列名))
begin
select @id=id from inserted
update 子表名 set lasttime = GETDATE() where pid = @id
end
end
效果好像不對, 單用if update(a), 也體現不出效果, 爲何?
若是咱們執行get
update 主表 set 列名a=原來的值 where id = idast
發現也觸發這個事件,這是不對的,只有列名a的值發生了改變,咱們才能修改子表的數據啊:class
咱們改成如下的觸發器,效果就出來了date
create trigger [tig_update] on 表名
after update
as
declare @id int,
@upflag int
begin
select @upflag = case when a.列名=b.列名 then 0 else 1 end, @id=a.id from deleted a left join inserted b on a.id = b.id
if (@upflag>0)
update 子表名 set lasttime = GETDATE() where pid = @id
endselect
解釋一下,deleted表中存的是修改前的值,inserted中存的是修改後的值,這樣是否是更好呢!程序