good-arrow’s blog

https://good-arrow.net/

テーブルの最終更新日時を記録する

SQL Server では、テーブル定義の変更の最終更新日時はシステムテーブルに記録されるが、
INSERT、UPDATE、DELETEの最終更新日時は記録されていないので、
トリガーで最終更新日時を記録する方法。

最終更新ログテーブルの作成

CREATE table CHANGELOG(
    TableName   sysname NOT NULL,
    ModDatetime datetime NULL
    
    CONSTRAINT PK_CHANGELOG PRIMARY KEY CLUSTERED 
    (
        [TableName]
    )
)

CHANGELOGに全テーブルのレコード作成

INSERT CHANGELOG SELECT name,NULL FROM sys.tables

トリガーの作成(各テーブルごとに作成)

トリガーの定義部分のみ各テーブル名に変更すれば、SQLの内容は変更しなくてもいいようにしています。

CREATE TRIGGER tr_CHANGELOG_UserMaster ON UserMaster FOR INSERT, UPDATE, DELETE AS BEGIN
    
    SET NOCOUNT ON
    
    DECLARE @tablename sysname
    SELECT @tablename = object_name(parent_id) FROM sys.triggers WHERE object_id = @@PROCID
    
    UPDATE
        CHANGELOG
    SET
        ModDatetime = GetDate()
    WHERE
        TableName=@tablename
END