使用测试,您可以检查 在 触发特定的列是否被更新(再采取具体行动),但你不能有一个触发 火灾
仅在特定列的更新。无论更新的目标是哪一列,它都会在执行更新后立即触发。
UPDATe( _columnname_)
因此,如果您认为必须使用
INSTEAD OF UPDATE触发器,则需要在其中实现两种动作:
1)在更新时(或更确切地说,更新 并 设置为)插入到
tbDeletedUsers+从中删除;
tbUsers``IsDeleted__
1
2)
tbUsers正常更新-
IsDeleted未更新(或已更新但未设置为
1)的时间。
因为可以用一条
UPDATE指令更新多个行,所以您可能还需要考虑到某些行可能已
IsDeleted设置为,
1而另一些行未设置为。
我不是
INSTEADOF触发器的忠实拥护者,但是如果我真的必须使用触发器来执行像您这样的任务,那么我可能会省略
UPDATE()测试并实现触发器,如下所示:
CREATE TRIGGER trg_ArchiveUsersON tbUsersINSTEAD OF UPDATEASBEGIN UPDATE tbUsers SET _column_ = INSERTED. _column_ , 鈥� FROM INSERTED WHERe INSERTED. _key_ = tbUsers. _key_ AND INSERTED.IsDeleted = 0 ; DELETE FROM tbUsers FROM INSERTED WHERe INSERTED. _key_ = tbUsers. _key_ AND INSERTED.IsDeleted = 1 ; INSERT INTO tbDeletedUsers ( _columns_ ) SELECT _columns_ FROM INSERTED WHERe IsDeleted = 1 ;END



