在视图上创建触发器而不是更新
Creating a trigger instead of UPDATE on a view
我有一个视图和一个覆盖更新的触发器。我试图理解代码,但是我在 from deleted
和 from 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'
此外,我建议避免在触发器内使用游标,因为它会严重影响性能。
此触发器将触发而不是执行更新。 inserted
和 deleted
table 可用,以便您可以确定:
inserted
中每个更新行的新值
deleted
中每个更新行的先前(在本例中为当前,因为尚未执行正常更新操作)值
无论触发器的类型如何,都使用inserted
和deleted
的约定。因此,例如,在 after update
触发器中,仅在执行正常更新之后,deleted
table 将是了解先前值的主要方式。
我有一个视图和一个覆盖更新的触发器。我试图理解代码,但是我在 from deleted
和 from 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'
此外,我建议避免在触发器内使用游标,因为它会严重影响性能。
此触发器将触发而不是执行更新。 inserted
和 deleted
table 可用,以便您可以确定:
inserted
中每个更新行的新值
deleted
中每个更新行的先前(在本例中为当前,因为尚未执行正常更新操作)值
无论触发器的类型如何,都使用inserted
和deleted
的约定。因此,例如,在 after update
触发器中,仅在执行正常更新之后,deleted
table 将是了解先前值的主要方式。