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

时间:2015-01-27 23:48:49

标签: sql sql-server triggers cursor

我有一个覆盖UPDATE的视图和触发器。我尝试理解代码,但是我遇到了一些问题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;
    ...

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

删除包含旧值,插入 - 新值。 有一些选项:AFTER UPDATE或BEFORE UPDATE,你可以设置它们来查看你想要的行为。

关于已删除和已插入: UPDATE dbo.Client SET Name =' John'姓名='史蒂夫' 您将拥有:已删除的值'史蒂夫',插入值'约翰'

另外,我建议避免在触发器中使用游标,即它可以达到很高的性能。