我有一个触发器,它使用相同插入记录的标识主键(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上运行.我假设设置有所不同,但我没有得到它试图告诉我的内容.
我过于复杂了吗?谢谢!
我认为这可能与安东尼·霍恩写的内容有关。
这有效吗?
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)
| 归档时间: |
|
| 查看次数: |
4378 次 |
| 最近记录: |