Применяется к
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

Проблемы

При запуске обновления для таблицы с кластеризованным или уникальным индексом, когда обновление выполняется в не первичном уникальном столбце, запись отслеживания изменений не согласуется с инструкцией update.

Например, предположим, что столбец с именем column1 включен в кластеризованный или уникальный индекс. При изменении значения столбца с большего на меньшее (например, изменение значения с 20 на 16) таблица отслеживания изменений получает операцию вставки перед операцией удаления. Например, операция вставки записи строки журнала транзакций получена до операции удаления строки или перед "D" вставляется "I".

Sys_change_version

sys_change_create_version

sys_change_operation

sys_change_column

sys_change_context

PK_column

1116

19

Я

NULL

NULL

5639485628

1116

20

D

NULL

NULL

5639485628

При изменении значения столбца с меньшего на большее значение (например, изменение значения с 16 на 20) перед "I" вставляется "D".

Sys_change_version

sys_change_create_version

sys_change_operation

sys_change_column

sys_change_context

PK_column

1126

32

D

NULL

NULL

5639485628

1126

33

Я

NULL

NULL

5639485628

Причина

Эта проблема возникает из-за неправильного упорядочения между парами удаления и вставки в боковой таблице отслеживания изменений.

Решение

Исправление этой проблемы включено в следующие обновления для SQL Server:

         Накопительный пакет обновления 8 для SQL Server 2017

         Накопительный пакет обновления 9 для SQL Server 2016 с пакетом обновления 1 (SP1)

Накопительный пакет обновления 12 для SQL Server 2014 с пакетом обновления 2 (SP2)

Сведения SQL Server сборках

Каждая новая сборка SQL Server содержит все исправления и исправления безопасности, которые были в предыдущей сборке. Рекомендуется установить последнюю сборку для SQL Server:

Последнее накопительное обновление для SQL Server 2017

последняя сборка SQL Server 2016

Последнее накопительное обновление для SQL Server 2014 г.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Дополнительная информация

Для таблицы с поддержкой отслеживания изменений при обновлении не основного столбца, который определен как уникальный, в боковую таблицу отслеживания изменений вставляются две записи: по одной записи для каждого из разделенных действий— "Вставка" и "Удалить".

При вызове функции CHANGETABLE для перечисления изменений эти записи сортируются по значениям первичного ключа, а затем операции агрегируются. Если обновление вставляет меньшее значение, сначала выполняется операция "I" в боковой таблице, за которой следует операция "D". В результате возвращается неправильная операция для этой строки. Это связано с тем, что строка "I" после "D" агрегирована как "D".

Так как в параллельных таблицах хранятся только значения первичного ключа, не обязательно иметь две отдельные записи. Это верно, если столбец первичного ключа не обновляется.

Эта проблема устранена для не первичных уникальных столбцов. В этом случае при обновлении вставляется только одна строка с буквой "U" в качестве операции обновления вместо двух записей с символами "D" и "I".

Ссылки

Сведения о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.