声明没有包含INTO子句错误的OUTPUT子句 [英] Statement contains an OUTPUT clause without INTO clause error

查看:1740
本文介绍了声明没有包含INTO子句错误的OUTPUT子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个触发器,更新插入字段(RootId)具有相同的插入的记录的身份主键(的MessageId)的值中的一个。当插入记录的RootId字段为0的更新应该只发生。
触发器是这样的:

I have a trigger that updates one of the inserted fields (RootId) with the value of the identity primary key (MessageId) of the same inserted record. The update should only happen when the RootId field of the inserted record is 0. The trigger looks like this:

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和当我插入一排,它给了我以下错误:

I use it in Azure and when I insert a row, it gives me the following error:

在DML语句的目标表'dbo.Messagess'不能有任何
  启用的触发器如果语句包含一个OUTPUT子句,而不
  INTO子句。

The target table 'dbo.Messagess' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.

同一个触发器工作在我真正的MS SQL 2012年我假设有在设置有差别,但我不明白是什么试图告诉我的。

The same trigger works on my real MS SQL 2012. I assume there is a difference in the settings but I do not get what it tries to tell me.

我是不是过于复杂的东西吗?
谢谢!

Am I overcomplicating something? Thanks!

推荐答案

我想这可能与什么安东尼·霍恩写道。

I think it may be related to what Anthony Horne wrote.

请问这项工作?

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

这篇关于声明没有包含INTO子句错误的OUTPUT子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆