在INSTEAD OF INSERT触发器的OUTPUT子句中,是否可以引用两个INSERTED表?

时间:2010-10-21 19:32:15

标签: sql-server triggers

SQL Server 2005 +

我有一个INSTEAD OF INSERT触发器的视图。在触发器的主体内部,我想使用带有OUTPUT子句的语句,该子句引用两个INSERTED表:

  • INSERTED触发器
  • 的外INSTEAD OF INSERT
  • INSERTED子句
  • 的内部OUTPUT

MSDN says this

  

如果在触发器主体内部使用包含OUTPUT子句的语句,则必须使用表别名来引用触发器插入和删除的表,以避免使用与OUTPUT关联的INSERTED和DELETED表重复列引用。

但是别名似乎不起作用:

CREATE TRIGGER v_insert ON v
INSTEAD OF INSERT
AS BEGIN
  INSERT INTO t (a, b, c)
  OUTPUT inserted.a, inserted.b, outer_inserted.d INTO t_prime (a, b, d)
  SELECT a, b, c
  FROM inserted as outer_inserted
END

它产生错误“多部分标识符”outer_inserted.d“无法绑定。这是否意味着我想要做的事情是不可能的?

2 个答案:

答案 0 :(得分:5)

我读了它,因为在你访问触发器INSERTED的FROM中需要INSERTED别名。

OUTPUT子句中的INSERTED只能 引用插入到t中的数据。

所以你的OUTPUT子句中不能有outer_inserted.d

你也不能这样做,这就是我读它的方式

INSERT INTO t (a, b, c)
  OUTPUT inserted.a, inserted.b INTO t_prime (a, b)
  SELECT a, b, c
  FROM inserted --no alias = **FAIL**

答案 1 :(得分:0)

这有点旧,但是你缺少来自outer_inserted表的SELECT中的d列,所以你不能在OUTPUT中引用它。