SqlServer Update觸發器判斷某個字段的值是否已經更改

要求:修改主表中某個字段的值,自動更新子表中的某個字段.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中存的是修改後的值,這樣是否是更好呢!程序

相關文章
相關標籤/搜索