Applies ToSQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

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

Kumulativ uppdatering 12 för SQL Server 2014 SP2

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

senaste versionen för SQL Server 2016

Senaste kumulativa uppdateringen för SQL Server 2014

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.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.