Požymiai
Kai paleidžiate naujinimą lentelėje, kurioje yra jungtinis arba unikalus indeksas, o naujinimas vyksta ne pirminiame unikaliame stulpelyje, keitimų sekimo įrašas yra nesuderinamas su sakiniu Atnaujinti.
Pavyzdžiui, tarkime, kad stulpelis, pavadintas "1stulpelis", yra įtrauktas į jungtinį arba unikalų indeksą. Kai stulpelio reikšmė pakeičiama iš didesnės į mažesnę (pvz., pakeičiama iš 20 į 16), keitimų sekimo šoninė lentelė gauna įterpimo operaciją prieš naikinimo operaciją. Pvz., operacijų žurnalo eilutės įterpimo operacija gaunama prieš eilutės naikinimo operaciją arba prieš "D" įterpiama "I".
| 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 |
Kai stulpelio reikšmė pakeičiama iš mažesnės į didesnę (pvz., pakeičiama reikšmė iš 16 į 20), prieš "I" įterpiama "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 |
Priežastis
Ši problema kyla dėl neteisingos naikinimo / įterpimo porų tvarkos keitimų sekimo šoninėje lentelėje.
Sprendimas
Šios problemos sprendimas įtrauktas į šiuos "„SQL Server“" naujinimus:
8 kaupiamasis naujinimas, skirtas „SQL Server“ 2017
9 kaupiamasis naujinimas, skirtas "„SQL Server“ 2016" 1 pakeitimų paketui
12 kaupiamasis naujinimas, skirtas „SQL Server“ 2014 SP2
Apie "„SQL Server“" komponavimo versijas
Kiekvienoje naujoje "„SQL Server“" versijoje yra visos karštosios pataisos ir saugos pataisos, kurios buvo ankstesnėje komponavimo versijoje. Rekomenduojame įdiegti naujausią "„SQL Server“" komponavimo versiją:
Naujausias "„SQL Server“ 2017" kaupiamasis naujinimas
naujausia "„SQL Server“ 2016" versija
Naujausias "„SQL Server“ 2014" kaupiamasis naujinimas
Būsena
„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.
Daugiau informacijos
Kai keitimų sekimą įgalinančios lentelės naujinimas atliekamas ne pirminiame stulpelyje, kuris apibrėžtas kaip unikalus, į keitimų sekimo šoninę lentelę įterpiami du įrašai: Po vieną įrašą kiekvienam perskirtajam veiksmui – Įterpti ir Naikinti.
Kai funkcija CHANGETABLE iškviečiama keitimams išvardyti, šie įrašai rikiuojami pagal pirminio rakto reikšmes, tada operacijos agreguojamos. Jei naujinimas įterpia mažesnę reikšmę, pirma šoniniame staliuke paleidžiama operacija I, po to operacija D. Dėl to šiai eilutei pateikiama neteisinga operacija. Taip yra todėl, kad "I" ir "D" agreguojamas kaip "D".
Šoninėse lentelėse išlaikomos tik pirminio rakto reikšmės, todėl nebūtina turėti dviejų atskirų įrašų. Tai galioja tol, kol neatnaujinamas pirminio rakto stulpelis.
Ši problema išspręsta ne pirminiuose unikaliuose stulpeliuose. Šiuo atveju, kai vyksta naujinimas, įterpiama tik viena eilutė naudojant "U" kaip naujinimo operaciją vietoj dviejų įrašų, kuriuose yra "D" ir "I".
Nuorodos
Sužinokite daugiau apie terminus , kuriuos "„Microsoft“" naudoja apibūdindama programinės įrangos naujinimus.