SQL函数SYSDATETIME()可以返回重复的值?



我有一个webApi注册订单,使用存储过程,分配创建日期= SYSDATETIME()。每个请求注册一个唯一的订单。

问题是两个不同的请求到我的Api, 在同一秒内,间隔不到200毫秒,生成对我的存储过程的两个不同调用(实际上相隔几毫秒),注册为相同的日期,完全相同,精度为毫秒。

例如:

  1. 命令1:100001 ->创建日期= 2020-12-01 01:01:01.1234567
  2. 订单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可能是一个选项。

相关内容

  • 没有找到相关文章

最新更新