SQL触发器输出

时间:2012-10-03 13:32:59

标签: sql triggers

我执行以下触发器:

ALTER TRIGGER [dbo].[TestTrigger] ON [dbo].[TestTable] 
after update as
    Declare @Name As varchar(30)
    update TestTable set [Name] = 'Rob Stanfield'
    select @Name = [Name] from inserted
    print @Name
GO

我正在执行的插入语句是:

INSERT INTO TestTable (name) VALUES ('Ed Watkins')

输出如下:

(1 row(s) affected)
Ed Watkins
(1 row(s) affected)

我希望输出为:

(1 row(s) affected)
Rob Stanfield

(1 row(s) affected)

我错过了什么?

1 个答案:

答案 0 :(得分:3)

Inserted将是触发器运行之前在TestTable中更改的行的副本,因此其中的name值仍为Ed Watkins。

我不确定您为什么要这样做,但是您必须查询刚刚更新的表格,以便在触发器中获取刚更新的新值:

ALTER TRIGGER [dbo].[TestTrigger] ON [dbo].[TestTable] 
after update as
    Declare @Name As varchar(30)
    update TestTable set [Name] = 'Rob Stanfield'
    select @Name = [Name] from TestTable 
    print @Name
GO

你真的在寻找instead of insert触发器吗?