我有一个触发器,它使用相同插入记录的标识主键(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.我认为设置有所不同,但我没有得到它试图告诉我的内容。
我是否过于复杂? 谢谢!
答案 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