SQL Server 2008 のストアド プロシージャで SYSDATETIME を使用していくつかのテストを行いました。IDENTITY フィールドを持つ datetime2(7) を持つテーブルをセットアップしました。
このデータ型の精度と精度の違いは理解していますが、この例から複数のレコードを挿入すると、通常とは異なる結果になることに気付きました。
declare @counter int
set @counter = 0
while @counter < 100000
begin
set @counter = @counter + 1
INSERT INTO t ([now]) VALUES (SYSDATETIME())
end
挿入ステートメント 100,000 を使用してループし、SYSDATETIME が期待どおりに正しく機能しているかどうかを判断しました。ただし、GETDATE に比べてそれほど正確ではないようです。
2015-12-01 19:16:58.4102452
2015-12-01 19:16:58.4102452
2015-12-01 19:16:58.4112452
2015-12-01 19:16:58.4112452
2015-12-01 19:16:58.4122453
2015-12-01 19:16:58.4122453
2015-12-01 19:16:58.4132453
2015-12-01 19:16:58.4152455
2015-12-01 19:16:58.4152455
2015-12-01 19:16:58.4162455
2015-12-01 19:16:58.4162455
2015-12-01 19:16:58.4172456
2015-12-01 19:16:58.4172456
2015-12-01 19:16:58.4182456
2015-12-01 19:16:58.4182456
2015-12-01 19:16:58.4192457
2015-12-01 19:16:58.4192457
2015-12-01 19:16:58.4202457
2015-12-01 19:16:58.4202457
2015-12-01 19:16:58.4212458
私の観察では、小数点以下 4 桁は最初の 3 桁とは無関係に増加しているように見えます。これは、実行された 100,000 回の挿入の傾向です。
この小さなサンプルの抜粋で最後の 2 秒の 10 進数に気付くと、.4212457 から .4212458 にジャンプします。
精度は 7 桁ですが、私の見解では精度は 3 桁しかありません。最後の 4 桁は、時間に関係なく増分方式で実行されます。データベースに挿入するたびに、時間値の最後の 4 桁が完全にランダムになると思います。
これは正しいステートメントですか、それとも真に正確な/ランダムな時間を取得する正しい方法はありますか?