Platí pro
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

Příznaky

Když spustíte aktualizaci v tabulce, která má clusterovaný nebo jedinečný index a k aktualizaci dojde v neprimárním jedinečném sloupci, záznam sledování změn je nekonzistentní s příkazem update.

Předpokládejme například, že sloupec s názvem "sloupec1" je součástí clusterovaného nebo jedinečného indexu. Když se hodnota sloupce změní z větší na menší hodnotu (například změna hodnoty z 20 na 16), tabulka na straně sledování změn obdrží operaci vložení před operací odstranění. Například operace záznamu řádku vložení transakčního protokolu je přijata před operaci odstranění řádku, nebo "I" je vložen před "D".

Sys_change_version

sys_change_create_version

sys_change_operation

sys_change_column

sys_change_context

PK_column

1116

19

I

NULL

NULL

5639485628

1116

20

D

NULL

NULL

5639485628

Při změně hodnoty sloupce z menší na větší hodnotu (například změna hodnoty z 16 na 20) se před "I" vloží "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

I

NULL

NULL

5639485628

Příčina

K tomuto problému dochází z důvodu nesprávné řazení mezi páry delete/insert v tabulce na straně sledování změn.

Řešení

Oprava tohoto problému je součástí následujících aktualizací pro SQL Server:

         Kumulativní aktualizace 8 pro SQL Server 2017

         Kumulativní aktualizace 9 pro SQL Server 2016 Service Pack 1

Kumulativní aktualizace 12 pro SQL Server 2014 SP2

Informace o sestaveních SQL Server

Každé nové sestavení pro SQL Server obsahuje všechny opravy hotfix a opravy zabezpečení, které byly v předchozím buildu. Doporučujeme nainstalovat nejnovější build pro SQL Server:

Nejnovější kumulativní aktualizace pro SQL Server 2017

nejnovější build pro SQL Server 2016

Nejnovější kumulativní aktualizace pro SQL Server 2014

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Více informací

V případě tabulky s povoleným sledováním změn se při aktualizaci neprimárního sloupce, který je definován jako jedinečný, vloží do tabulky na straně sledování změn dvě položky: jednu položku pro každou akci rozdělení, vložení a odstranění.

Při volání funkce CHANGETABLE pro výčet změn jsou tyto položky seřazeny podle hodnot primárního klíče a pak se operace agregují. Pokud aktualizace vloží nižší hodnotu, spustí se nejprve operace "I" na boční tabulce následovaná operací "D". To způsobí vrácení nesprávné operace pro tento řádek. Důvodem je to, že "I" následované "D" se agreguje jako "D".

Vzhledem k tomu, že v bočních tabulkách jsou zachovány pouze hodnoty primárního klíče, není nutné mít dvě samostatné položky. To platí, pokud se sloupec primárního klíče neaktualizuje.

Tento problém je opravený u neprimárních jedinečných sloupců. V tomto případě, když dojde k aktualizaci, pouze jeden řádek se vloží tak, že "U" jako operaci aktualizace místo dvou položek, které mají "D" a "I".

Odkazy

Přečtěte si o terminologii , kterou Microsoft používá k popisu aktualizací softwaru.

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.