我有一个webApi注册订单,使用存储过程,分配创建日期= SYSDATETIME()
。每个请求注册一个唯一的订单。
问题是两个不同的请求到我的Api, 在同一秒内,间隔不到200毫秒,生成对我的存储过程的两个不同调用(实际上相隔几毫秒),注册为相同的日期,完全相同,精度为毫秒。
例如:- 命令1:100001 ->创建日期= 2020-12-01 01:01:01.1234567
- 订单2:100002 ->创建日期= 2020-12-01 01:01:01.1234567
这是存储过程
中的代码declare @date datetime2
select @date = SYSDATETIME()`
理论上,sql函数SYSDATETIME()不会重复值,但在我的例子中,它们是重复的(在不同的日期在我的数据库中多次重复)。
知道发生了什么事吗?
From the docs:
注意
SQL Server使用GetSystemTimeAsFileTime() Windows API获取日期和时间值。其准确性取决于运行SQL Server实例的计算机硬件和Windows版本。这个API的精度固定在100纳秒。精度可以通过使用GetSystemTimeAdjustment() Windows API来确定。
所以肯定会有双重数据。Windows确实有一个高精度时钟,但是SQL Server不使用它。如果需要,CLR可能是一个选项。