2017-02-22 18 views
0

Представьте, что у меня есть таблица с включенным отслеживанием изменений, и я обновляю столбец таблицы для данного первичного ключа. Значение, которое я обновляю, - это ТОЛЬКО значение, которое было ранее.CHANGE_TRACKING_IS_COLUMN_IN_MASK, когда значение не изменилось

Глядя на docs, MSDN говорит, что эта функция вернет true, если столбец находится в коллекции change_columns.

CHANGE_TRACKING_IS_COLUMN_IN_MASK возвращает следующие значения.

0: Указанный столбец не находится в списке change_columns.

1: Указанный столбец находится в списке change_columns.

Глядя further, то change_columns список является оберткой вокруг собственности CHANGETABLE.SYS_CHANGE_COLUMNS, которая определяется как:

список столбцов, которые изменились с момента last_sync_version ( исходный уровень).

Который двусмыслен. Что означает «изменение» в этом контексте? Если значение одинаков, то изменилось ли оно?

Кто-нибудь знает ответ?

+0

Я подозреваю, что для обеспечения легкого веса механизма слежения он не сравнивает значение до и после, а использует механизм, аналогичный (если не точно) функции columns_updated. –

+0

@BenThul - да, это было бы и моим подозрением. На самом деле, я попробовал, и мы оба были правы. Идите инстинкты! –

ответ

0

Я только что попробовал и могу сообщить, что да, CHANGE_TRACKING_IS_COLUMN_IN_MASK возвращает значение true, когда значение столбца было изменено независимо от того, что произошло с фактической измененной дельта.

+1

Даже если это было не так, считайте, что отслеживание изменений только сообщает о произошедших изменениях, а не о том, сколько изменений и промежуточных значений. Поэтому, если все ваши значения 'A' начинаются как' 1', обновления 'UPDATE Tbl SET A = 2', а затем' UPDATE Tbl SET A = 1' были бы неотличимы от вашего не-обновления в вопросе, так что вы бы так или иначе, придется обрабатывать эту ситуацию. –