您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何检查INSTEAD OF UPDATE触发器中是否正在更新列

如何检查INSTEAD OF UPDATE触发器中是否正在更新列

使用测试,您可以检查 触发特定的列是否被更新(再采取具体行动),但你不能有一个触发 火灾 仅在特定列的更新。无论更新的目标是哪一列,它都会在执行更新后立即触发。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
其他 2022/1/1 18:31:49 有543人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶