簡體   English   中英

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

[英]SQL Server IDENTITY(1,1) Column not generated in sync with UpdatedDate

我在基於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小於UpdatedDate的較小ID的其他(舊的)記錄。 這對我來說很奇怪,因為ID列是用IDENTITY(1,1)定義的,這意味着它是單調遞增的。 因此,ID值越高,記錄越新,因此UpdatedDate列應始終增加,並且記錄#23不應具有較舊的時間戳。

BTW插入到日志表只是使用GETDATE()UpdatedDate列。

能以某種方式解釋嗎?

我很確定您正在衡量兩種不同的方法。 updatedDate可能更類似於調用觸發器時,甚至調用update / delete id是將行實際插入表中的時間。

因此,您看到的是較舊的更新/刪除稍后會記錄到日志中。 我推測這是因為該過程需要更長的時間-常見的原因是更多的行受到影響,頁面拆分,索引更新,觸發器。 因為花費的時間更長,所以較早的日期要比其他事務記錄得更晚。

我認為,如果對列使用default getdate() ,則會看到更多的一致性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM