创建时态表

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 时间。