Temporal Tables
の Important のところに、system start time (SysStartTime) は、同一トランザクションのデータは、同じ UTC 時間を持たないとダメと書いてます。
SysStartTime 列は、GENERATED ALWAYS AS ROW START として定義し、自分で値を設定しません。
で、DEFAULT と同じ挙動だと同じ UTC 時間にならないよなーと思い確認してみました。
試した環境は
TechNet Virtual Labs Exploring SQL Server 2016 Temporal Tables
です。*1
これの 1.2, 1.3 を終わらして 既存のテーブル Person.BusinessEntityContract を Temporal Table にしたとこから確認しています。
select cast(GETUTCDATE() as datetime2) as [before tran] begin tran select cast(GETUTCDATE() as datetime2) as [start tran] insert into Person.BusinessEntityContract (BusinessEntityID, PersonID, ContractTypeID, rowguid, ModifiedDate) output inserted.BusinessEntityID, inserted.SysStartTime values (10008, 1977, 11, NEWID(), getutcdate()) select cast(GETUTCDATE() as datetime2) as [inserted 10008] waitfor delay '00:00:02' select cast(GETUTCDATE() as datetime2) as [delay] insert into Person.BusinessEntityContract (BusinessEntityID, PersonID, ContractTypeID, rowguid, ModifiedDate) output inserted.BusinessEntityID, inserted.SysStartTime values (10009, 1977, 12, NEWID(), getutcdate()) select cast(GETUTCDATE() as datetime2) as [inserted 10009] commit select BusinessEntityID, SysStartTime from Person.BusinessEntityCotract where BusinessEntityID in (10008, 10009)
これを見ると、SysStartTime は同じ値になっています。
Transaction の開始時点の時刻を設定するような動きになっているようですね。*2