Sümptomid
Kui käivitate tabeli, mis sisaldab rühmitatud või kordumatut indeksit ja värskendust ei ole esmasel kordumatul veerul, siis muutuste jälituse kirje pole vastavuses Update ' i lausega.
Oletame näiteks, et veergu nimega "Veerg1" kaasatakse rühmitatud või kordumatusse registrisse. Kui veeru väärtust muudetakse suuremast väiksema väärtuseni (nt väärtus 20-st 16-ni), saab tabeli muutuste jälituse tabel lisada operatsioonile enne kustutamise toimingut. Näiteks sisestatakse kirje "tehingulogi lisamine" enne rea kustutamise toimingut või "I" lisatakse enne sõna "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
Kuidas |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Kui veeru väärtust muudetakse väiksemaks kui suur väärtus (nt väärtus 16 – 20), lisatakse "D" enne sõna "I".
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 |
Kuidas |
NULL |
NULL |
5639485628 |
Põhjus
See probleem ilmneb vale järjestuse tõttu kustutamise/lisamise paari vahel tabelis muutuste jälituse side.
Lahendus
Selle probleemi lahendus on kaasatud SQL serveri järgmistesse värskendustesse.
Kumulatiivne Update 8 SQL Server 2017
Kumulatiivne Update 9 SQL Server 2016 hoolduspaketi 1 jaoks
SQL serveri järkude teave
Iga uus järk SQL serveri jaoks sisaldab kõiki varasemas järgus olevaid Kiirparandusi ja turvaparandusi. Soovitatav on installida SQL serveri uusim järk:
Olek
Microsoft on kinnitanud, et see probleem esineb jaotises "kehtib järgmiste toodete kohta" loetletud Microsofti toodetes.
Lisateave
Kui muutuste jälituse tabel on lubatud, lisatakse tabelisse muudatuste jälituse tabel kaks kirjet: üks kirje iga tükeldatud toimingu kohta, lisamine ja kustutamine.
Kui funktsiooni CHANGETABLE nimetatakse muudatuste loendamiseks, sorditakse need kirjed primaarvõtme väärtuste järgi ja seejärel on toimingud koondatud. Kui värskendus lisab väiksema väärtuse, käivitatakse kõigepealt "I" toiming, millele järgneb "D" toiming. Selle tulemusena tagastatakse vale toiming selle rea jaoks. See on sellepärast, et "I" järgneb "D" on koondatud kui "D".
Kuna tabelites säilitatakse ainult primaarvõtme väärtused, pole vaja kahte eraldi kirjet. See kehtib seni, kuni primaarvõtme veergu ei värskendata.
See probleem on lahendatud mitte-esmaste kordumatute veergude jaoks. Sel juhul, kui värskendamine toimub, lisatakse ainult üks rida, mille asemel on "U", mitte kaks kirjet, millel on "D" ja "I".
Viited
Siit saate teada, Kuidas Microsoft kasutab tarkvaravärskenduste kirjeldamiseks.