使用测试,您可以检查 在 触发特定的列是否被更新(再采取具体行动),但你不能有一个触发 火灾 仅在特定列的更新。无论更新的目标是哪一列,它都会在执行更新后立即触发。UPDATE( _columnname_ )
因此,如果您认为必须使用INSTEAD OF UPDATE
触发器,则需要在其中实现两种动作:
1)在更新时(或更确切地说,更新 并 设置为)插入到tbDeletedUsers
+从中删除;tbUsers``IsDeleted
__1
2)tbUsers
正常更新-IsDeleted
未更新(??或已更新但未设置为1
)的时间。
因为可以用一条UPDATE
指令更新多个行,所以您可能还需要考虑到某些行可能已IsDeleted
设置为,1
而另一些行未设置为。
我不是INSTEAD OF
触发器的忠实拥护者,但是如果我真的必须使用触发器来执行像您这样的任务,那么我可能会省略UPDATE()
测试并实现触发器,如下所示:
CREATE TRIGGER trg_ArchiveUsers
ON tbUsers
INSTEAD OF UPDATE
AS
BEGIN
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