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
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
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.