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“无法绑定。这是否意味着我想要做的事情是不可能的?
答案 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中引用它。