0

SQL データベースのトリガーに取り組んでいます。

テーブル:

TABLE1: ID(int、自動インクリメント)、value1(varchar)、value2(varchar)、count(int)

TABLE1_History: ID (TABLE1.ID、int、自動インクリメントとは別)、TABLE1 と同じ列ですが、TimeStamp(smalldatetime) が追加されています

コード:

    SELECT @@ROWCOUNT FROM TABLE1_History, INSERTED
    WHERE TABLE1_History.value1 LIKE INSERTED.value1
    AND TABLE1_History.value2 LIKE INSERTED.value2
    AND DATEDIFF(HOUR,TABLE1_History."TimeStamp", GETDATE()) > 24;

    IF(@@ROWCOUNT = 0)
    BEGIN
        INSERT INTO TABLE1_History(value1, value2, count, "TimeStamp")
        SELECT value1, value2, count, GETDATE() FROM INSERTED
    END
    ELSE
    BEGIN
        UPDATE TABLE1_History
        SET "TimeStamp" = GETDATE(), count = count+(SELECT count FROM INSERTED)
        WHERE TABLE1_History.value1 LIKE (SELECT value1 FROM INSERTED)
        AND TABLE1_History.value2 LIKE (SELECT value2 FROM INSERTED)
        AND DATEDIFF(HOUR,TABLE1_History."TimeStamp", GETDATE()) < 24;
    END
END

何が起こるはずです:

TABLE1 に新しい行を追加すると、TABLE1_History が更新されます。

TABLE1_Historyは、新しい行と同じ value1&value2 を持つ行が既に存在し、その行が追加されてから 24 時間以上経過している場合にのみ、新しい行を追加します。

それ以外の場合、カウンターは増加します。

何が起こるのですか:

現在、TABLE1_History は毎回更新されます。値が一致するかどうかは問題ではありません。

TABLE1_History.ID を TABLE1.ID から分離することを決定する前に、うまくいくように見えました。

4

1 に答える 1