在视图上创建触发器而不是更新

Creating a trigger instead of UPDATE on a view

我有一个视图和一个覆盖更新的触发器。我试图理解代码,但是我在 from deletedfrom inserted 行遇到了一些麻烦 - 这些是由原始更新自动创建的吗?这是否意味着如果我调用此触发器,首先调用更新,然后调用触发器?

create trigger updateView on View
instead of UPDATE as
begin
    declare @nameK VARCHAR(100), @addresK VARCHAR(100), @nameZ VARCHAR(100), @number INT, @date DATE;
    declare @nameKo VARCHAR(100), @addresKo VARCHAR(100), @nameZo VARCHAR(100), @numbero INT, @dateo DATE; -- 'o'ld

    declare insCur cursor for select name, addres, bandName, number, date from inserted;
    declare delCur cursor for select name, addres, bandName, number, date  from deleted;
    open insCur;
    open delCur;
    ...

删除的包含旧值,插入的包含新值。 有选项:更新后或更新前,您可以设置它们以查看您想要的行为。

关于删除和插入: 更新 dbo.Client 设置名称 = 'John' 其中名称 = 'Steve' 您将拥有:删除值 'Steve'、插入值 'John'

此外,我建议避免在触发器内使用游标,因为它会严重影响性能。

此触发器将触发而不是执行更新。 inserteddeleted table 可用,以便您可以确定:

  1. inserted
  2. 中每个更新行的新值
  3. deleted
  4. 中每个更新行的先前(在本例中为当前,因为尚未执行正常更新操作)值

无论触发器的类型如何,都使用inserteddeleted 的约定。因此,例如,在 after update 触发器中,仅在执行正常更新之后,deleted table 将是了解先前值的主要方式。