我有一个触发器,我认为只有当其中一个列更新而不是表时才会更新。有没有办法重写这个,所以只有当指定的列更新而不是表中的其他字段
时才会触发CREATE TRIGGER [afm].[afm_rm_dwgs_t] ON [afm].[rm]
FOR UPDATE
AS
IF (UPDATE(area) OR UPDATE(dv_id)
OR UPDATE(dp_id) OR UPDATE(rm_cat)
OR UPDATE(rm_type) OR UPDATE(rm_std))
BEGIN
SET NOCOUNT ON;
UPDATE afm.afm_dwgs
SET dwg_updt = 1
WHERE afm_dwgs.dwg_name IN (SELECT dwgname FROM inserted)
END
答案 0 :(得分:1)
不,触发器被定义为 FOR UPDATE ON [afm]。[rm] ,因此它将始终为该表上的每次更新触发。没有办法预先限制它。
你在触发器内的检查将消除实际做任何事情的任何“多余”触发器激活。
答案 1 :(得分:1)
假设您要检查区域列是否已更新,则代码将如下所示:
declare @oldArea varchar(50)
declare @newArea varchar(50)
select @oldArea= area from deleted
select @newArea=area from inserted
if ( @oldArea <> @newArea)
-- area is updated
答案 2 :(得分:0)