Отслеживание изменений SQL SYS_CHANGE_COLUMNS

Мы используем SQL 2008 R2 и начали изучать отслеживание изменений в качестве нашего метода идентификации изменений для экспорта в наше хранилище данных. Нас интересуют только определенные столбцы.

Мы идентифицируем изменения в реплицированной копии исходной базы данных. Если мы запросим таблицу изменений на исходном сервере, будет доступно любое конкретное обновление столбца, и SYS_CHANGE_COLUMNS будет заполнен.

Однако в реплицированной копии изменения отслеживаются, но поле SYS_CHANGE_COLUMNS всегда имеет значение NULL для изменения обновления.

Отслеживание обновленных столбцов имеет значение true на подписчике.

Это связано с тем, как работает репликация и выполняется обновление всей строки, и поэтому вы не можете получить изменения на уровне столбца на подписчике?

Любая помощь или альтернативные подходы будут высоко оценены.

Спасибо


person Scott    schedule 20.11.2014    source источник


Ответы (1)


Я понимаю, что это старый вопрос, но, поскольку я столкнулся с ним, я полагаю, что могу также дать ответ другим, кто придет позже.

SYS_CHANGE_COLUMNS имеет значение null, когда каждый столбец «обновляется». «Обновлено» здесь не обязательно означает, что значение изменилось, это просто означает, что столбец был затронут оператором DML. Итак, «update t set c = c» будет означать, что столбец c был «обновлен».

Таким образом, вставки и удаления всегда будут иметь значение SYS_COLUMNS_CHANGED, равное «null», поскольку вставка или удаление затрагивают всю строку. Но большинство технологий репликации выполняют обновление, устанавливая для каждого значения столбца значение столбца в источнике репликации. Поэтому «обновление» репликации будет касаться каждого столбца, поэтому значение SYS_CHANGE_COLUMNS всегда будет нулевым.

person allmhuran    schedule 06.02.2018