-1

次のトリガーを使用して、テーブルの最終更新日を追跡しています。

CREATE TRIGGER trg_UpdateTimeEntry
ON dbo.TimeEntry
AFTER UPDATE
AS
    UPDATE dbo.TimeEntry
    SET ModDate = GETDATE()
    WHERE ID IN (SELECT DISTINCT ID FROM Inserted)

「AFTER UPDATE」と書いてありますが、行を挿入しても ModDate 列が入力日と同じに設定されます。どうすればこれを防ぐことができますか? 新しい行が追加されたときではなく、行にチャンスを作ったときにのみ変更したいです(この場合はNULLのままにする必要があります)。

ありがとう!

4

1 に答える 1

0
CREATE TRIGGER trg_update_my_table on my_table 
FOR UPDATE AS            
BEGIN
    UPDATE my_table
    SET modified_on=getdate()
    FROM my_table INNER JOIN deleted d
    on my_table.id = d.id
END
GO

または、既存のトリガーの定義を変更できます

CREATE TRIGGER trg_UpdateTimeEntry
ON dbo.TimeEntry
AFTER UPDATE
AS
    UPDATE dbo.TimeEntry
    SET ModDate = GETDATE()
    WHERE ID IN (SELECT DISTINCT ID FROM deleted)

挿入されたテーブルには、新しく挿入されたすべてのレコードと更新されたレコードの新しい値が含まれ、削除されたテーブルには、更新されたレコードの古い値のみが含まれます。

于 2013-10-08T20:23:24.840 に答える