0

我有一个 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() 不会重复值,但在我的情况下,它们会重复(在我的数据库中在不同的日期多次)。

知道发生了什么吗?

4

1 回答 1

1

文档

笔记

SQL Server 使用 GetSystemTimeAsFileTime() Windows API 获取日期和时间值。准确性取决于运行 SQL Server 实例的计算机硬件和 Windows 版本。此 API 的精度固定为 100 纳秒。精度可以通过使用 GetSystemTimeAdjustment() Windows API 来确定。

所以肯定会有翻倍的数据。Windows 确实有一个高精度时钟,但 SQL Server 不使用它。如果你需要它,CLR 可能是一个选择。

于 2021-01-14T13:07:33.607 回答