我有一个触发器,我认为只有当其中一列被更新时才会更新,而不是表。有没有办法重写它,使其只在指定的列更新时触发,而不是表中的其他字段更新
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发布于 2010-11-25 06:16:23
不会,触发器在afm.rm上被定义为FOR UPDATE,因此它将始终在该表上的每次更新时触发。没有办法预先限制这一点。
您在触发器内部的检查将消除任何“多余的”触发器激活,使其不会实际执行任何操作。
发布于 2010-11-25 06:16:32
假设您想检查area列是否已更新,则代码将如下所示:
declare @oldArea varchar(50)
declare @newArea varchar(50)
select @oldArea= area from deleted
select @newArea=area from inserted
if ( @oldArea <> @newArea)
-- area is updated发布于 2010-11-25 06:19:04
UPDATE()只表示该列包含在数据集中。它没有表示底层数据是否不同。
你将不得不变得更复杂一点。
您需要比较删除的值和插入的值,以查看是否有更改。
有关更多信息,请查看this link。
https://stackoverflow.com/questions/4271984
复制相似问题