SQL Server IDENTITY(1,1)列未与UpdatedDate同步生成

时间:2018-07-13 21:02:55

标签: sql sql-server database

我在基于SQL Server的应用程序中遇到了一个奇怪的情况,我试图找出在解释它时所缺少的内容。

我在表上有一个触发器,每次在表中更新/删除记录时,触发器都会在日志表中插入一条日志。贝娄是我的日志表的一个示例,其中包含我最近发现的内容。

ID    UpdatedDate
------------------------------
10    2018-07-06 12:20:54.287
11    2018-07-06 12:20:54.657
12    2018-07-06 12:20:54.703
13    2018-07-06 12:20:54.910
14    2018-07-06 12:20:54.900
15    2018-07-06 12:20:54.953
16    2018-07-06 12:20:55.070
17    2018-07-06 12:20:55.087
18    2018-07-06 12:20:55.100
19    2018-07-06 12:20:55.113
20    2018-07-06 12:20:55.117
21    2018-07-06 12:20:55.143
22    2018-07-06 12:20:55.243
23    2018-07-06 12:20:53.973

如果您查看最后一条记录#23,则UpdateDate小于ID较小的其他(较旧)记录的UpdatedDate。这对我来说很奇怪,因为ID列是用IDENTITY(1,1)定义的,这意味着它是单调递增的。因此,ID值越高,记录就越新,因此UpdatedDate列应始终增加,并且记录#23的时间戳不应更早。

在日志表中的插入操作只对GETDATE()列使用UpdatedDate

这可以用某种方式解释吗?

1 个答案:

答案 0 :(得分:2)

我很确定您正在测量两种不同的方法。 updatedDate可能更像是调用触发器时,甚至是调用update / delete时。 id是实际将行插入表中的时间。

因此,您看到的是较旧的更新/删除将在以后进入日志。我推测这是因为该过程需要更长的时间-常见的原因是更多的行受到影响,页面拆分,索引更新,触发器。因为花费的时间更长,所以较早的日期要比其他交易记录得更晚。

我认为,如果您为该列使用default getdate(),则会看到更多的一致性。