我在基于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
。
这可以用某种方式解释吗?
答案 0 :(得分:2)
我很确定您正在测量两种不同的方法。 updatedDate
可能更像是调用触发器时,甚至是调用update
/ delete
时。 id
是实际将行插入表中的时间。
因此,您看到的是较旧的更新/删除将在以后进入日志。我推测这是因为该过程需要更长的时间-常见的原因是更多的行受到影响,页面拆分,索引更新,触发器。因为花费的时间更长,所以较早的日期要比其他交易记录得更晚。
我认为,如果您为该列使用default getdate()
,则会看到更多的一致性。