2

私は2つのテーブルを持っています

最初のテーブル Listexecutionaction で構成されます。アクションの。次のようなテーブルの構造

QueueId  ActionId  Executed
135      44         1
135      45         1
135      46         1
135      47         1
135      48         1

実行された合計アクションの要約で構成される 2 番目のテーブル Listqueue。次のような構造

DDBMSKEY    NoOfActivities   Completed
135         5                3

私の要件は、Listexecutionaction テーブルのすべての挿入と更新に対して、NoOfActivities と No. of Actions を計算する必要があることです。このために、次のように 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

トリガーの何が問題なのかを提案してください。うまくいくときもあれば、失敗するときもあります。Insert と Update の両方でトリガーしたい

4

1 に答える 1

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

問題が解決するとは思わない。少なくともクエリは短くなる。

于 2013-02-13T16:00:09.447 に答える