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

时间:2012-09-21 20:21:12

标签: 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

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

  

DML语句的目标表'dbo.Messagess'不能包含任何内容   如果语句包含OUTPUT子句,则启用触发器   INTO条款。

同样的触发器适用于我真正的MS SQL 2012.我认为设置有所不同,但我没有得到它试图告诉我的内容。

我是否过于复杂? 谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这可能与Anthony Horne的写作有关。

这有用吗?

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