我已经在 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
根据我的观察,最后四位小数似乎是独立于前三位数字而递增的。这是执行的 100,000 次插入的趋势。
如果您注意到这个小样本摘录中的最后两位小数秒,它会从 0.4212457 跳到 0.4212458。
虽然它具有 7 位的精度,但我认为准确度只有 3 位。最后四位数字以与时间无关的增量方式运行。我希望每次插入数据库时,时间值的最后 4 位小数都是完全随机的。
这是一个正确的说法,还是有正确的方法来获得真正准确/随机的时间?