7

我有一个触发器,它使用同一插入记录的身份主键 (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

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

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

相同的触发器适用于我真正的 MS SQL 2012。我认为设置有所不同,但我不明白它试图告诉我什么。

我是不是把事情复杂化了?谢谢!

4

1 回答 1

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
于 2014-05-24T01:02:44.317 回答