建立時態表
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 上,操作的行為與執行最多三個語句( INSERT , UPDATE 和/或 DELETE )的行為完全相同,具體取決於 MERGE 語句中指定的操作。
提示: 系統 datetime2 列中記錄的時間基於事務本身的開始時間。例如,在單個事務中插入的所有行將在與 SYSTEM_TIME 時段的開始對應的列中記錄相同的 UTC 時間。