Symptom
När du kör en uppdatering på en tabell som har ett kluster-eller unikt index och uppdateringen sker på en unik kolumn, är ändrings spårnings posten inkonsekvent med Update-instruktionen.
Anta till exempel att en kolumn med namnet "kolumn1" ingår i det klustrade eller unika indexet. När kolumnvärdet ändras från ett större till ett mindre värde (till exempel genom att ändra värdet från 20 till 16) får tabellen för ändrings spårnings sidan INSERT-åtgärden innan borttagningen. Åtgärden Infoga rad post i transaktions loggen tas till exempel före åtgärden ta bort rad eller "jag" infogas före "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19.1 |
I |
KAN |
KAN |
5639485628 |
1116 |
20.1 |
D |
KAN |
KAN |
5639485628 |
När kolumnvärdet ändras från ett mindre till ett förstorings värde (till exempel genom att ändra värdet från 16 till 20) infogas "D" före "I".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1126 |
32 |
D |
KAN |
KAN |
5639485628 |
1126 |
33 |
I |
KAN |
KAN |
5639485628 |
Orsak
Det här problemet beror på felaktig ordning mellan Delete/INSERT-par i tabellen för ändrings spårning.
Lösning
Korrigeringen för det här problemet ingår i följande uppdateringar för SQL Server:
Kumulativ uppdatering 8 för SQL Server 2017
Kumulativ uppdatering 9 för SQL Server 2016 Service Pack 1
Om SQL Server-versioner
Varje ny version för SQL Server innehåller alla snabb korrigeringar och säkerhets korrigeringar som fanns i den föregående versionen. Vi rekommenderar att du installerar den senaste versionen av SQL Server:
Senaste kumulativa uppdateringen för SQL Server 2017
Status
Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".
Mer information
För en tabell över ändrings spårning aktive rad när en uppdatering görs på en icke-primär kolumn som är definierad som unik, infogas två poster i tabellen ändrings spårnings sida: en post för varje delnings åtgärd, infoga och ta bort.
När CHANGETABLE -funktionen anropas för att räkna upp ändringarna sorteras dessa poster efter primär nyckelvärdena och sedan utförs operationerna ihop. Om uppdateringen infogar ett lägre värde körs en "I"-operation först i sido tabellen, följt av en D-åtgärd. Detta gör att en felaktig åtgärd returneras för den här raden. Det beror på att "I" följt "D" är aggregerat som "D".
Eftersom endast primär Nycklarnas värden bevaras i sid tabeller är det inte nödvändigt att ha två separata poster. Det här är sant så länge primär kolumnen inte har uppdaterats.
Det här problemet åtgärdas för unika kolumner utan primärt. I det här fallet infogas bara en rad med "U" som en uppdatering i stället för två poster med "D" och "I", när uppdateringen inträffar.
Referenser
Lär dig mer om terminologin som används av Microsoft för att beskriva program varu uppdateringar.