Изменение захвата данных для нескольких таблиц

SQL Server 2008. Можно ли создать сбор данных об изменениях (или отслеживание изменений) для нескольких связанных таблиц в базе данных? Например, отношение «многие ко многим».

Как это будет выглядеть?


person Anton Lyhin    schedule 13.01.2012    source источник


Ответы (1)


Никогда не использовал его, но из документа MSDN я бы сказал: да!

сначала подготовьте БД:

ALTER DATABASE [yourdb] SET ALLOW_SNAPSHOT_ISOLATION ON

ALTER DATABASE [yourdb]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)

Теперь включите отслеживание изменений в нужных таблицах:

ALTER TABLE [yourdb].[yourschema].[yourtable]
ENABLE CHANGE_TRACKING

Запрос на изменения:

IF @sync_initialized = 0
  SELECT * 
  FROM [yourschema].[yourtable] LEFT OUTER JOIN 
  CHANGETABLE(CHANGES [yourschema].[yourtable], @sync_last_received_anchor) CT
  ON CT.[yourkey] = [yourschema].[yourtable].[yourkey]
ELSE
BEGIN
  SELECT *
  FROM Sales.Customer 
  JOIN CHANGETABLE(CHANGES [yourschema].[yourtable], @sync_last_received_anchor) CT
  ON CT.[yourkey] = [yourschema].[yourtable].[yourkey]
  WHERE (CT.SYS_CHANGE_OPERATION = 'I' 
  AND CT.SYS_CHANGE_CREATION_VERSION 
  <= @sync_new_received_anchor)
END
person rene    schedule 14.01.2012