Отслеживание изменений — sys_change_operation — это все я?

Я создал тестовую таблицу.

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.

Однако следующий запрос возвращает все «I» для sys_change_operation? Что может вызвать проблему? (Кстати, я пытался включить 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")

person ca9163d9    schedule 29.05.2014    source источник


Ответы (1)


Взгляните на эту прекрасную статью здесь. Это объясняет, почему вы видите такое поведение. Проблема связана с передачей 0 в качестве аргумента CHANGETABLE.

person AshesToAshes    schedule 14.02.2015