SQLサーバシステム


データベーステーブルに作られたデータ変更の監査証跡を維持する必要がある場合があります.SQL Server 2016は、これを達成するためにTemporalテーブルのサポートを追加しました.
既存のテーブルへのバージョン管理の追加
非時間テーブルは、期間定義を追加し、以下のようにシステムバージョニングを可能にすることによって、システムバージョンのテーブルに変更することができます.
ALTER TABLE myschema.mytable
    ADD   
        SysStartTime DATETIME2(0) GENERATED ALWAYS AS ROW START HIDDEN
            CONSTRAINT DF_SysStart DEFAULT SYSUTCDATETIME()
      , SysEndTime DATETIME2(0) GENERATED ALWAYS AS ROW END HIDDEN
            CONSTRAINT DF_SysEnd DEFAULT CONVERT(DATETIME2 (0), '9999-12-31 23:59:59'),
        PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime);        

ALTER TABLE myschema.mytable  
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = history.trial_mytable));
時間表からの歴史的データの質問
この機能のパワーはそのシンプルさにある.システムのバージョン管理が可能になれば、履歴表を忘れることができます.SQL Serverは私たちの変更の履歴を管理します.私たちは直接メインテーブルを照会することができて、データが下で構文を使用して過去のどんな点で見たかのスナップショットを得ることができました.
select *
from myschema.mytable
FOR SYSTEM_TIME AS OF '2020-12-31 17:47:46' ;
もう一つの良いことは、変更だけが履歴表に格納されることです.つまり、テーブルを作成し、有効なバージョン管理を行います.メインテーブルのデータが更新または削除された場合のみ、変更履歴がテーブルに入ります.言い換えると、SQL Serverはメインテーブルと履歴テーブルの間に重複したレコードを作成しません.
システムバージョンの時間表を使用する場合に留意すべき事項については、SQL Server documentationを参照してください.
ソース
https://docs.microsoft.com/en-us/sql/relational-databases/tables/creating-a-system-versioned-temporal-table?view=sql-server-2017