【问题标题】:Creating a trigger instead of UPDATE on a view在视图上创建触发器而不是 UPDATE
【发布时间】:2015-01-27 23:48:48
【问题描述】:

我有一个视图和一个覆盖 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;
    ...

【问题讨论】:

    标签: sql sql-server triggers cursor


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      关于删除和插入: 更新 dbo.Client SET Name = 'John' WHERE Name = 'Steve' 您将拥有:删除值“史蒂夫”,插入值“约翰”

      另外我建议避免在触发器中使用游标,即它会大大影响性能。

      【讨论】:

        猜你喜欢
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2014-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        相关资源
        最近更新 更多