Simptomai
Kai naujinate lentelę, kurioje yra Jungtinė arba unikali rodyklė, o naujinimas vykdomas nepagrindiniame unikaliame stulpelyje, keitimų sekimo įrašas nesuderinamas su atnaujinimo patvirtinimu.
Pavyzdžiui, Tarkime, kad stulpelis, pavadintas "stulpelis1" , yra įtrauktas į Jungtinę arba unikalų indeksą. Kai stulpelio reikšmė pakeičiama iš didesnės į mažesnę reikšmę (pvz., pakeitus reikšmę nuo 20 iki 16), keitimų sekimo lentelė gauna įterpimo operaciją prieš naikinimo operaciją. Pvz., operacijų žurnalų įterpimo eilutės įrašo operacija gauta prieš naikinimo eilutės operaciją, arba "I" įterpiama prieš "D."
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
Aš |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Kai stulpelio reikšmė pakeičiama iš mažesnio į largeer reikšmę (pvz., pakeitus reikšmę nuo 16 iki 20), "D" įterpiama prieš "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 |
Aš |
NULL |
NULL |
5639485628 |
Priežastis
Ši problema kyla dėl neteisingo užsakymo naikinimo/įterpimo porų lentelėje keitimų sekimas.
Sprendimas
Šios problemos sprendimas įtrauktas į šiuos SQL serverio naujinimus:
Kaupiamasis naujinimas 8 SQL serverio 2017
Kaupiamasis naujinimas 9 SQL serverio 2016 1 pakeitimų paketui
Apie "SQL Server" komponavimo versijas
Kiekvienoje naujoje "SQL Server" versijoje yra visos karštosios pataisos ir saugos pataisos, kurios buvo ankstesniame komponavimo versijoje. Rekomenduojame įdiegti naujausią "SQL Server" komponavimo versiją:
Naujausias Kaupiamasis naujinimas, skirtas "SQL Server 2017"
naujausias "SQL Server 2016" Komponavimo versija
Naujausias Kaupiamasis naujinimas, skirtas "SQL Server 2014"
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.
Daugiau informacijos
Jei yra įgalinta lentelė keitimų sekimas, kai "non-Primary" stulpelyje, kuris apibrėžtas kaip unikalus, pasirodo du įrašai, įterpiami į lentelę keitimų sekimas: vienas įrašas apie kiekvieną išskaidytų veiksmų skaičių, įterpti ir naikinti.
Kai pakeičiama funkcija CHANGETABLE , kad būtų išvardyti keitimai, šie įrašai surikiuojami pagal pirminių raktų reikšmes, tada operacijos sujungiamos. Jei naujinimas įterpia mažesnę reikšmę, pirmiausia "I" operacija vykdoma pirmojoje pusėje esančioje lentelėje, o po jos yra operacija "D". Dėl šios eilutės grąžinama neteisinga operacija. Taip yra todėl, kad "aš" po "D" yra agreguotas kaip "D."
Kadangi šoninėje lentelėje palaikomos tik pirminių raktų reikšmės, nebūtina turėti du atskirus įrašus. Tai yra teisinga tol, kol neatnaujinamas pirminis rakto stulpelis.
Ši problema išspręsta nepirminių unikalių stulpelių srityje. Šiuo atveju, kai bus atnaujinta, tik viena eilutė įterpiama "U" kaip naujinimo operacija, o ne du įrašus, kuriuose yra "D" ir "I".
Nuorodos
Sužinokite apie terminologiją "Microsoft" naudoja programinės įrangos naujinimams apibūdinti.