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

Joh*_*ohn 4 sql-server triggers

SQL Server 2005+

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

  • 触发器的外部INSERTEDINSTEAD OF INSERT
  • INSERTEDOUTPUT子句的内部表

MSDN :

如果在触发器主体内部使用包含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
Run Code Online (Sandbox Code Playgroud)

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

gbn*_*gbn 5

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

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

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

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

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**
Run Code Online (Sandbox Code Playgroud)