建立時態表

CREATE TABLE dbo.Employee   
(    
  [EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED   
  , [Name] nvarchar(100) NOT NULL  
  , [Position] varchar(100) NOT NULL   
  , [Department] varchar(100) NOT NULL  
  , [Address] nvarchar(1024) NOT NULL  
  , [AnnualSalary] decimal (10,2) NOT NULL  
  , [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START  
  , [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END  
  , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)  
 )    
 WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));  

插入內容: 在一個 INSERT ,系統設定為值 ValidFrom 列到當前事務的開始時間基於所述系統時鐘(在 UTC 的時區)和用於將值分配 ValidTo 列的 9999-最大值 12-31。這標誌著行是開放的。

更新:UPDATE 上,系統將行的先前值儲存在歷史表中,並根據系統時鐘將 ValidTo 列的值設定為當前事務的開始時間(在 UTC 時區中)。這會將該行標記為已關閉,並記錄該行有效的時間段。在當前表中,行以其新值更新,系統根據系統時鐘將 ValidFrom 列的值設定為事務的開始時間(在 UTC 時區中)。當前表中 ValidTo 列的更新行的值仍為最大值 9999-12-31。

DELETES :在 DELETE 上,系統將行的先前值儲存在歷史記錄表中,並根據系統時鐘將 ValidTo 列的值設定為當前事務的開始時間(在 UTC 時區中)。這會將行標記為已關閉,並記錄上一行有效的時間段。在當前表中,該行將被刪除。當前表的查詢不會返回此行。只有處理歷史資料的查詢才會返回關閉行的資料。

MERGE :在 MERGE 上,操作的行為與執行最多三個語句( INSERTUPDATE 和/或 DELETE )的行為完全相同,具體取決於 MERGE 語句中指定的操作。

提示: 系統 datetime2 列中記錄的時間基於事務本身的開始時間。例如,在單個事務中插入的所有行將在與 SYSTEM_TIME 時段的開始對應的列中記錄相同的 UTC 時間。