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 から分離することを決定する前に、うまくいくように見えました。