相关疑难解决方法(0)

MS SQL日期时间精度问题

我有一种情况,两个人可能从两台不同的计算机上处​​理相同的订单(存储在MS SQL数据库中).为了防止数据丢失,如果首先保存他的订单副本,然后稍后第二个将保存他的副本并覆盖第一个,我在保存之前添加了对lastSaved字段(datetime)的检查.

代码看起来大致如下:

private bool orderIsChangedByOtherUser(Order localOrderCopy)
{
    // Look up fresh version of the order from the DB
    Order databaseOrder = orderService.GetByOrderId(localOrderCopy.Id);

    if (databaseOrder != null &&
        databaseOrder.LastSaved > localOrderCopy.LastSaved)
    {
        return true;
    }
    else
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这大部分时间都有效,但我发现了一个小bug.

如果orderIsChangedByOtherUser返回false,则本地副本将其lastSaved更新为当前时间,然后保留到数据库.现在,本地副本和DB中的lastSaved值应该相同.但是,如果再次运行orderIsChangedByOtherUser,即使没有其他用户对DB进行更改,它有时也会返回true.

在Visual Studio中进行调试时,databaseOrder.LastSavedlocalOrderCopy.LastSaved似乎具有相同的值,但是当仔细观察时,它们会有几次相差几毫秒.

我发现这篇文章是关于SQL中datetime的毫秒精度的简短注意事项:

另一个问题是SQL Server以3.33毫秒(0. 00333秒)的精度存储DATETIME.

我能想到的解决这个问题的方法是比较两个日期时间,如果相差小于10毫秒,则认为它们相等.

那么我的问题是:有没有更好/更安全的方法来比较MS SQL中的两个日期时间值,看它们是否完全相同

sql sql-server precision datetime

6
推荐指数
1
解决办法
6475
查看次数

标签 统计

datetime ×1

precision ×1

sql ×1

sql-server ×1