我有两张桌子
第一个表Listexecutionaction由no组成。行动表的结构如下
QueueId ActionId Executed
135 44 1
135 45 1
135 46 1
135 47 1
135 48 1
第二个表列表队列,包括已完成的总动作的摘要。结构如下
DDBMSKEY NoOfActivities Completed
135 5 3
我的要求是对于Listexecutionaction表上的每个Insert和Update,它应该计算NoOfActivities和已完成的操作数。为此,我在Listexecutionaction上的表上写了触发器,如下所示。
ALTER TRIGGER [Common].[ActivityStatus_AfterInsertUpdate] ON [Common].[ListExecutionAction] AFTER Insert,Update
AS
BEGIN
UPDATE COMMON.LISTQUEUE
SET
NOOFACTIVITIES=
(SELECT count(ID) FROM common.listexecutionaction WHERE queueid=lstact.queueid),
Completed=
(SELECT count(ID) FROM common.listexecutionaction WHERE queueid=lstact.queueid And Executed=1)
FROM common.listqueue lstqueue left join common.listexecutionaction lstact
ON lstqueue.DDBMSKey= lstact.queueid
WHERE lstqueue.DDBMSKey in (Select queueid from Inserted)
END
我对表Listqueue的期望输出应该如下
DDBMSKEY NoOfActivities Completed
135 5 5
但有时触发器会计算错误的结果。已完成的行动并将结果作为
DDBMSKEY NoOfActivities Completed
135 5 3
请告知触发器有什么问题。有时它工作正常并且有时失败。 我想在插入和更新
上触发答案 0 :(得分:0)
您的查询似乎可以简化为:
ALTER TRIGGER [Common].[ActivityStatus_AfterInsertUpdate]
ON [Common].[ListExecutionAction] AFTER Insert,Update
AS
BEGIN
UPDATE COMMON.LISTQUEUE
SET
NOOFACTIVITIES=
(SELECT count(ID)
FROM common.listexecutionaction
WHERE queueid=lstact.queueid),
Completed=
(SELECT count(ID)
FROM common.listexecutionaction
WHERE queueid=lstact.queueid And Executed=1)
WHERE lstqueue.DDBMSKey in (Select queueid from Inserted)
END
我认为这不会解决问题,至少查询会更短。