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

Symptomer

Når du kører en opdatering på en tabel, der har et grupperet eller entydigt indeks, og opdateringen forekommer på en ikke-primær entydig kolonne, er registreringsposten for ændringer i strid med opdateringssætningen.

Antag f.eks., at en kolonne med navnet "kolonne1" er inkluderet i det grupperede eller entydige indeks. Når kolonneværdien ændres fra en større til en mindre værdi (f.eks. ændring af værdien fra 20 til 16), modtager tabellen til registrering af ændringer indsætningshandlingen før sletningen. Transaktionsloggen indsætter f.eks. rækkeposthandlingen, før handlingen slet række indsættes, eller "I" indsættes før "D".

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

Når kolonneværdien ændres fra en mindre til en større værdi (f.eks. ændring af værdien fra 16 til 20), indsættes "D" før "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

I

NULL

NULL

5639485628

Årsag

Dette problem opstår på grund af forkert rækkefølge mellem slet/indsæt par i tabellen til registrering af ændringer.

Løsning

Løsningen på dette problem er inkluderet i følgende opdateringer til SQL Server:

         Samlet opdatering 8 til SQL Server 2017

         Samlet opdatering 9 til SQL Server 2016 Service Pack 1

Samlet opdatering 12 til SQL Server 2014 SP2

Om SQL Server-builds

Hvert nye build til SQL Server indeholder alle de hotfixes og sikkerhedsrettelser, der var i det tidligere build. Vi anbefaler, at du installerer det nyeste build til SQL Server:

Seneste akkumulerede opdatering til SQL Server 2017

seneste build til SQL Server 2016

Seneste kumulativ opdatering til SQL Server 2014

Status

Microsoft har bekræftet, at problemet findes i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Flere oplysninger

Når en tabel til registrering af ændringer er aktiveret, indsættes der to poster i tabellen til registrering af ændringer, når der forekommer en opdatering på en ikke-primær kolonne, der er defineret som entydig, i tabellen til registrering af ændringer: En post for hver af de opdelte handlinger, Indsæt og Slet.

Når funktionen SKIFTTABEL kaldes for at optælle ændringerne, sorteres disse poster efter primære nøgleværdier, og derefter sammenlægges handlingerne. Hvis opdateringen indsætter en lavere værdi, køres en "I"-handling på sidetabellen først efterfulgt af en "D"-handling. Dette medfører, at der returneres en forkert handling for denne række. Dette skyldes, at "I" efterfulgt "D" sammenlægges som "D".

Da det kun er værdierne for den primære nøgle, der bevares i sidetabellerne, er det ikke nødvendigt at have to separate poster. Dette gælder, så længe kolonnen med den primære nøgle ikke opdateres.

Dette problem er rettet for ikke-primære entydige kolonner. I dette tilfælde, når opdateringen forekommer, indsættes der kun én række ved at have "U" som en opdateringshandling i stedet for to poster, der har "D" og "I".

Referencer

Få mere at vide om den terminologi , som Microsoft bruger til at beskrive softwareopdateringer.

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.