我有一个类型字段“record_lock”,用户可以自由设置。目的是当record_lock = 0时可以进行更新和删除,并且当record_lock = 1时,它们不能。该表有一个AFTER UPDATE触发器,当使用“IF UPDATE(field)”语句更新不同的字段时触发某些操作,我希望保留这种行为。
如果我要创建一个INSTEAD OF UPDATE触发器,那么它可能看起来像:
UPDATE table
SET field1=inserted.field1
...
fieldx=inserted.fieldx
FROM table INNER JOIN inserted ON table.ID=inserted.ID
WHERE record_lock=0
但是,所有字段将被视为已由AFTER UPDATE触发器更新。我不想要这个。或者,我可以这样做:
IF UPDATE(field1)
UPDATE table
SET field1=inserted.field1
FROM table INNER JOIN inserted ON table.ID=inserter.ID
WHERE record_lock=0;
...
IF UPDATE(fieldx)
UPDATE table
SET fieldx=inserted.fieldx
FROM table INNER JOIN inserted ON table.ID=inserter.ID
WHERE record_lock=0;
但随后它会触发多次更新,这些更新也会在更新后发生混乱,效率可能会降低。
我真正想说的是“正常启动更新,但仅适用于record_lock = 0的记录”。我找不到办法做到这一点。它甚至在“INSTEAD OF UPDATE”之前需要一定程度的触发,也许是“IGNORE UPDATE”!