gpt4 book ai didi

sql-server - IDENTITY 和 GetDate 乱序

转载 作者:行者123 更新时间:2023-12-03 00:57:32 24 4
gpt4 key购买 nike

我有一个表,其中包含由 GetDate() 设置的 IDENTITY 列和 DateTime 列,如下所示:

CREATE TABLE [MyTable](
[Id] [int] IDENTITY(1,1) ,
[InsertTime] [datetime] DEFAULT (getdate()),
[OtherValues] [int]
)

所有插入均使用 IDENTITY 和 DateTime 列的默认值执行,如下所示:

INSERT INTO [MyTable] ([OtherValues]) VALUES (1)

始终作为任何显式事务之外的独立语句。

我希望 Id 会严格增加,InsertTime 也会增加但不严格。但在负载很重的情况下,我们会看到一些这样的实例:

| Id   | InsertTime              |
|------|-------------------------|
| 3740 | 2015-03-05 10:07:25.560 |
| 3741 | 2015-03-05 10:07:25.557 |
| 3742 | 2015-03-05 10:07:25.577 |

插入时间略有下降。

有谁知道这是如何发生的以及行的“正确”顺序是什么?

最佳答案

记录的正确顺序是“身份”列所描述的顺序。
您描述的偏差完全在 DateTime 数据类型可接受的精度范围内(0.00333 毫秒)。

问题是 Datetime数据类型根本不那么准确。你应该使用Datetime2如果您的sql server版本支持它(即2008或更高版本)。

datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

看看这个 comparison table MSDN 中的日期和时间数据类型之间的关系。

Read this article以获得全面的解释。

关于sql-server - IDENTITY 和 GetDate 乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com