1

我正在使用 SQL Server 2008,并且在我的数据库上启用了更改跟踪。在数据库中的一张表上,我创建了以下触发器。

CREATE TRIGGER [dbo].[tr_student]
   ON [dbo].[Student]
   FOR UPDATE,DELETE
AS 
BEGIN
   SET NOCOUNT ON;
   SELECT CHANGE_TRACKING_CURRENT_VERSION()
END

此触发器的目的是 - 当我更新或删除表 dbo.Student 中的记录时,我应该获得当前更改跟踪版本 ID。

但是当我更新/删除表中的记录时,CHANGE_TRACKING_CURRENT_VERSION() 不是给出当前的version_id,而是给出以前的version_id。触发触发器后,如果我执行 select CHANGE_TRACKING_CURRENT_VERSION() 我将获得正确的当前版本 ID。

那么 Change_Tracking_Current_Version() id 是否仅在触发后更改?有什么方法可以在触发器中获得正确的 Change_Tracking_Current_Version() 吗?

4

1 回答 1

3

根据手册,这个功能

返回与最后提交的事务关联的版本。

(重点是我的。)

当您的触发器正在执行时,事务尚未提交。所以是的,新值将在触发后返回。

此外,无法触发器中获取新 ID,因为如手册中其他地方所述,

更改跟踪基于已提交的事务。

(重点是我的。)

于 2012-10-30T12:31:15.750 回答