我需要一个触发器,如果表行的一个或多个字段被更新,该触发器就会更新该行字段。
假设您有一个雇员表,如下所示:
EmployeeId Name Address ModificationDate
1 Spears 27 Sober Road
2 Jagger 65 Straight Street
如果除EmployeeId
and ModificationDate
字段,触发器应该生成一个时间值并更新ModificationDate
.
实际更改的示例 1:
update dbo.Employees
set Name = 'Beggar'
where EmployeeId = 2
没有实际变化的示例 2:
update dbo.Employees
set Name = 'Jagger'
where EmployeeId = 2
如果执行示例 2 中的更新,触发器不应更新 ModificationDate 字段。
在触发器中,您可以访问“插入”和“删除”系统表。
这些表包含表中已由导致触发器执行的语句更新的记录。
对于“UPDATE”触发器,“插入”表包含处于新状态的记录,“删除”表包含具有旧值的记录。
您必须利用这两个表来找出哪些记录确实发生了更改,并更新这些记录的 ModificationDate。
我认为触发器内的语句看起来像这样。 (我没有测试过)
UPDATE myTable
SET ModificationDate = getdate()
FROM inserted, deleted
WHERE inserted.EmployeeId = deleted.EmployeeId
AND (inserted.Name <> deleted.Name OR inserted.Address <> deleted.Address)
编辑:
我玩了一下:
create trigger upd_employee on [employee] after update
as
begin
update employee
set modifdate = getdate()
where employee.empid in
( select i.empid
from inserted i
inner join deleted d on i.empid = d.empid
where (i.name <> d.name or i.address <> d.address )
)
end
insert into employee
values
(1, 'Frederik' , '', null)
insert into employee
values
(2, 'User', '', null)
update employee
set [address] = 'some address'
select * from employee
update employee set [name] = 'test' where empid = 2
select * from employee
update employee set [name] = 'test' where empid = 2
select * from employee
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)