我已经在 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 位小数在每次插入数据库时都是完全随机的。
这是一个正确的陈述,还是有正确的方法来获得真正准确/随机的时间?