Symptomen
Wanneer u een update uitvoert voor een tabel met een geclusterde of unieke index en de update voor een niet-primaire unieke kolom voorkomt, is de record voor het bijhouden van wijzigingen niet consistent met de instructie update.
Stel dat een kolom met de naamKolom1 is opgenomen in de geclusterde of unieke index. Wanneer de waarde van de kolom wordt gewijzigd van een waarde die groter is dan een kleinere waarde (zoals het wijzigen van de waarde van 20 in 16), ontvangt de tabel change tracking de invoegbewerking vóór de bewerking Delete. Het logboek met een record voor een record met een record met een record invoegen wordt bijvoorbeeld ontvangen vóór de bewerking rij verwijderen of ' I ' vóór ' D '.
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
Vind |
WAARDEN |
WAARDEN |
5639485628 |
1116 |
Maxi |
2D |
WAARDEN |
WAARDEN |
5639485628 |
Wanneer de waarde van de kolom wordt gewijzigd van kleiner in een grootere waarde (zoals het wijzigen van de waarde van 16 naar 20), wordt "D" ingevoegd voor "I".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1126 |
32 |
2D |
WAARDEN |
WAARDEN |
5639485628 |
1126 |
33 |
Vind |
WAARDEN |
WAARDEN |
5639485628 |
Oorzaak
Dit probleem doet zich voor vanwege een onjuiste volgorde tussen de optie paren verwijderen/invoegen in de tabel wijzigingen bijhouden.
Oplossing
De oplossing voor dit probleem is opgenomen in de volgende updates voor SQL Server:
Cumulatieve update 8 voor SQL Server 2017
Cumulatieve update 9 voor SQL Server 2016 Service Pack 1
Info over SQL Server-versies
Elke nieuwe build voor SQL Server bevat alle hotfixes en beveiligingsfixes van de eerdere build. U wordt aangeraden de nieuwste versie van SQL Server te installeren:
Nieuwste cumulatieve update voor SQL Server 2017
Status
Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.
Meer informatie
Als u een tabel voor het bijhouden van wijzigingen hebt ingeschakeld en er een update plaatsvindt voor een niet-primaire kolom die is gedefinieerd om uniek te zijn, worden er twee vermeldingen ingevoegd in de side table change tracking-tabel: één item voor elk van de gesplitste acties, invoegen en verwijderen.
Wanneer de functie CHANGETABLE wordt aangeroepen om de wijzigingen op te sommen, worden deze waarden gesorteerd op primaire-sleutelwaarden en worden de bewerkingen geaggregeerd. Als de update een lagere waarde invoegt, wordt eerst de bewerking "I" uitgevoerd voor de tabel en gevolgd door een "D"-bewerking. Hierdoor wordt een onjuiste bewerking geretourneerd voor deze rij. Dit komt doordat ' I ', gevolgd door ' d ' geaggregeerd.
Aangezien alleen de primaire-sleutelwaarden in de tabellen worden bijgehouden, is het niet nodig om twee aparte vermeldingen te hebben. Dit is waar als de primaire-sleutelkolom niet wordt bijgewerkt.
Dit probleem is opgelost voor niet-primaire unieke kolommen. Wanneer de update plaatsvindt, wordt slechts één rij ingevoegd door ' U ' als een updatebewerking uit te voeren in plaats van twee vermeldingen met ' D ' en ' I '.
Verwijzingen
Informatie over de terminologie die door Microsoft wordt gebruikt om software-updates te beschrijven.