Statement包含一个没有INTO子句错误的OUTPUT子句

Mir*_* J. 5 sql azure

我有一个触发器,它使用相同插入记录的标识主键(MessageId)的值更新其中一个插入字段(RootId).只有当插入记录的RootId字段为0时才会发生更新.触发器如下所示:

ALTER TRIGGER [dbo].[Trigger_RootIdUpdate] 
   ON  [dbo].[Messages] 
   AFTER INSERT
AS BEGIN
   SET NOCOUNT ON;

   DECLARE @MessageId Int

    SELECT @MessageId = I.MessageId         
      FROM INSERTED I
    UPDATE Messages
       SET RootId = @MessageId
     WHERE MessageId = @MessageId AND MessageId = 0

END
Run Code Online (Sandbox Code Playgroud)

我在Azure中使用它,当我插入一行时,它给我以下错误:

如果语句包含没有INTO子句的OUTPUT子句,则DML语句的目标表'dbo.Messagess'不能具有任何已启用的触发器.

同样的触发器在我真正的MS SQL 2012上运行.我假设设置有所不同,但我没有得到它试图告诉我的内容.

我过于复杂了吗?谢谢!

For*_*esR 0

我认为这可能与安东尼·霍恩写的内容有关。

这有效吗?

ALTER TRIGGER [dbo].[Trigger_RootIdUpdate] 
  ON  [dbo].[Messages] 
  AFTER INSERT
AS BEGIN
  UPDATE 
    Messages
  SET 
    Messages.RootId = INSERTED.MessageId 
  FROM Messages Msg
  JOIN INSERTED ON 
    Msg.MessageId = INSERTED.MessageId 
  WHERE 
    Msg.MessageId = INSERTED.MessageId 
    AND INSERTED.RootId = 0;
END
Run Code Online (Sandbox Code Playgroud)