Vzťahuje sa na
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

Príznaky

Keď spustíte aktualizáciu v tabuľke, ktorá má skupinový alebo jedinečný index a aktualizácia sa vyskytuje v inom ako primárnom jedinečnom stĺpci, záznam sledovania zmien je nekonzistentný s príkazom aktualizácie.

Predpokladajme napríklad, že stĺpec s názvom Stĺpec1 je súčasťou skupinového alebo jedinečného indexu. Keď sa hodnota stĺpca zmení z väčšej na menšiu hodnotu (napríklad zmena hodnoty z 20 na 16), tabuľka na strane sledovania zmien prijme operáciu vkladania pred operáciou odstránenia. Napríklad operácia vloženia záznamu riadka denníka transakcií sa prijme pred operáciou odstránenia riadka alebo I sa vloží pred "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

Keď sa hodnota stĺpca zmení z menšej na väčšiu hodnotu (napríklad zmena hodnoty zo 16 na 20), pred hodnotu I sa vloží písmeno 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

Príčina

Tento problém sa vyskytuje z dôvodu nesprávneho poradia medzi pármi odstránenia alebo vloženia v bočnej tabuľke sledovania zmien.

Riešenie

Oprava tohto problému je zahrnutá v nasledujúcich aktualizáciách pre SQL Server:

         Kumulatívna aktualizácia 8 pre SQL Server 2017

         Kumulatívna aktualizácia 9 pre SQL Server 2016 Service Pack 1

Kumulatívna aktualizácia 12 pre SQL Server 2014 SP2

Informácie o zostavách SQL Server

Každá nová zostava pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli v predchádzajúcej zostave. Odporúčame nainštalovať najnovšiu zostavu pre SQL Server:

Najnovšia kumulatívna aktualizácia pre SQL Server 2017

najnovšia zostava pre SQL Server 2016

Najnovšia kumulatívna aktualizácia pre SQL Server 2014

Stav

Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.

Ďalšie informácie

V prípade tabuľky s povoleným sledovaním zmien sa pri aktualizácii v inom ako primárnom stĺpci, ktorý je definovaný ako jedinečný, do bočnej tabuľky sledovania zmien vložia dve položky: jedna položka pre každú rozdelenú akciu, Vložiť a Odstrániť.

Keď je funkcia CHANGETABLE vyvolaná na enumeráciu zmien, tieto položky sa zoradia podľa hodnôt hlavného kľúča a potom sa operácie agregujú. Ak aktualizácia vloží nižšiu hodnotu, najskôr sa v bočnej tabuľke spustí operácia I a potom operácia D. To spôsobí, že pre tento riadok sa vráti nesprávna operácia. Dôvodom je, že výraz "I" nasledovaný výrazom "D" je agregovaný ako "D".

Keďže v bočných tabuľkách sa uchovávajú iba hodnoty hlavného kľúča, nie je potrebné mať dve samostatné položky. Platí to, pokiaľ sa stĺpec primárneho kľúča neaktualizuje.

Tento problém je opravený v iných ako primárnych jedinečných stĺpcoch. V tomto prípade sa pri aktualizácii vloží len jeden riadok tak, že ako operáciu aktualizácie sa vloží "U" namiesto dvoch položiek s "D" a "I".

Odkazy

Získajte informácie o terminológii , ktorá spoločnosť Microsoft používa na popis aktualizácií softvéru.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.