更改跟踪 - sys_change_operation都是"我"?

时间:2014-05-29 22:59:20

标签: sql-server sql-server-2008 change-tracking

我创建了一个测试表。

create table test (Id int not null, ......) 
  ON [PRIMARY] WITH (DATA_COMPRESSION = PAGE)
GO
ALTER TABLE test ADD PRIMARY KEY CLUSTERED (Id) 
  WITH (DATA_COMPRESSION = PAGE) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [ix_timestamp] ON test ([timestamp]) 
  WITH (DATA_COMPRESSION = PAGE) ON [PRIMARY]
GO
ALTER TABLE test ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)

更新:该表有一个触发器,用于编写另一个表中所有更改的PK

我在表格中插入了一些值。然后使用update test set ... where Id = 1更新了一行。

但是,以下查询返回sys_change_operation的所有“I”?什么可能导致问题? (顺便说一下,我试图启用CDC,但它没有捕获任何东西。)

select distinct commit_time,sys_change_operation, count(*)
-- select *
from
    changetable(changes dbo.test, 0) c
    join sys.dm_tran_commit_table tc on c.sys_change_version = tc.commit_ts
group by commit_time, sys_change_operation

结果:

commit_time             sys_change_operation Count
----------------------- -------------------- -----------
2014-05-29 22:39:22.397 I                    5944
2014-05-29 22:47:41.220 I                    1 
(The last row should be "U")

1 个答案:

答案 0 :(得分:4)

看一下这篇优秀文章here。它解释了为什么你会看到这种行为。问题是将0作为参数传递给CHANGETABLE。

相关问题