Simptomi
Kada pokrenete ažuriranje u tablici koja ima grupirani ili jedinstveni indeks, a ažuriranje se pojavljuje na neprimarnom jedinstvenom stupcu, zapis praćenja promjena nije dosljedan s izjavom Update.
Pretpostavimo, primjerice, da je stupac koji se zove "column1" , u grupnom ili jedinstvenom indeksu". Kada se vrijednost stupca promeni iz veće u manju vrijednost (kao što je promjena vrijednosti od 20 do 16), tablica promjena tablice praćenja prima Postupak umetanja prije operacije brisanja. Ako, primjerice, Postupak umetanja zapisnika u zapisnik transakcije primi prije brisanja operacije retka ili "I" umeće se prije "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
Sam |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Kada se vrijednost stupca promijeni od manjeg do vrijednosti (kao što je promjena vrijednosti od 16 do 20), "D" umeće se prije "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 |
Sam |
NULL |
NULL |
5639485628 |
Uzrok
Taj se problem pojavljuje zbog netočnog redoslijeda između brisanja/umetanja parova u stranu tablica za praćenje promjena.
Rješenje
Rješavanje tog problema obuhvaćeno je sljedećim ažuriranjima za SQL Server:
Kumulativno ažuriranje 8 za SQL Server 2017
Kumulativno ažuriranje 9 za SQL Server 2016 Service Pack 1
O izradi sustava SQL Server
Svaki novi međuverzija za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su bili u prethodnoj izradi. Preporučujemo da instalirate najnoviju izgradnju za SQL Server:
Najnovije Kumulativno ažuriranje za SQL Server 2017
Status
Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".
Dodatne informacije
Ako je u tablici omogućeno praćenje promjena, kada se ažuriranje pojavljuje na stupcu koji nije primarni, koji je definiran kao jedinstven, u tablicu promjena tablice praćenja umeće se dva unosa: jedan unos za svaku od razdijeljenih akcija, umetanje i brisanje.
Kada se funkcija Changetable poziva na numeriranje promjena, te se stavke sortiraju prema vrijednostima primarnog ključa, a zatim se operacije objedinuju. Ako ažuriranje umeće nižu vrijednost, najprije se pokreće operacija "I" na strani tablica, a zatim operacija "D". To uzrokuje neispravnu operaciju koja se vraća za ovaj redak. To je zato što je "I" slijedi "D" je agregiran kao "D".
Budući da se u bočne tablice zadržavaju samo vrijednosti primarnog ključa, nije potrebno imati dva odvojena unosa. To vrijedi sve dok se stupac primarni ključ ne ažurira.
Taj je problem riješen za jedinstvene stupce koji nisu primarni. U ovom slučaju, kada se ažuriranje pojavi, umeće se samo jedan redak tako da imate "U" kao operaciju ažuriranja, a ne dva unosa koja imaju "D" i "i".
Reference
Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ažuriranja.