Se aplică laSQL 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

Simptome

Atunci când rulați o actualizare într-un tabel care are un index unic sau grupat și actualizarea are loc într-o coloană unică non-primară, înregistrarea de urmărire a modificărilor nu este consistentă cu instrucțiunea de actualizare.

De exemplu, să presupunem că o coloană denumită "coloana1" este inclusă în indexul unic sau grupat. Atunci când valoarea coloanei este modificată de la o valoare mai mare la o valoare mai mică (cum ar fi modificarea valorii de la 20 la 16), tabelul lateral de urmărire a modificărilor primește operațiunea de inserare înainte de operațiunea de ștergere. De exemplu, operațiunea de inserare a înregistrării rândului din jurnalul de tranzacții este primită înainte de operațiunea de ștergere a rândului sau de inserarea "I" înainte de "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

Atunci când valoarea coloanei este modificată de la o valoare mai mică la o valoare mai mare (cum ar fi modificarea valorii de la 16 la 20), se inserează "D" înainte de "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

Cauză

Această problemă apare din cauza unei ordini incorecte între perechile de ștergere/inserare din tabelul lateral de urmărire a modificărilor.

Rezolvare

Remedierea pentru această problemă este inclusă în următoarele actualizări pentru SQL Server:

         Actualizarea cumulativă 8 pentru SQL Server 2017

         Actualizarea cumulativă 9 pentru SQL Server 2016 Service Pack 1

Actualizarea cumulativă 12 pentru SQL Server 2014 SP2

Despre versiunile SQL Server

Fiecare versiune nouă pentru SQL Server conține toate remedierile rapide și remedierile de securitate care au fost în versiunea anterioară. Vă recomandăm să instalați cea mai recentă versiune pentru SQL Server:

Cea mai recentă actualizare cumulativă pentru SQL Server 2017

cea mai recentă versiune pentru SQL Server 2016

Cea mai recentă actualizare cumulativă pentru SQL Server 2014

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Mai multe informații

Pentru un tabel activat pentru urmărirea modificărilor, atunci când are loc o actualizare într-o coloană non-principală definită a fi unică, sunt inserate două intrări în tabelul lateral de urmărire a modificărilor: o intrare pentru fiecare dintre acțiunile de scindare, Inserare și Ștergere.

Atunci când funcția CHANGETABLE este apelată pentru enumerarea modificărilor, aceste intrări sunt sortate după valorile cheii primare, apoi operațiunile sunt agregate. Dacă actualizarea inserează o valoare mai mică, se execută mai întâi o operațiune "I" în tabelul lateral, urmată de o operațiune "D". Acest lucru provoacă o operațiune incorectă returnată pentru acest rând. Acest lucru se întâmplă deoarece "I" urmat "D" este agregat ca "D".

Deoarece numai valorile cheii primare sunt menținute în tabelele laterale, nu este necesar să aveți două intrări separate. Acest lucru este valabil atât timp cât coloana cheii primare nu se actualizează.

Această problemă este remediată pentru coloanele unice non-primare. În acest caz, atunci când are loc actualizarea, se inserează un singur rând, având "U" ca operațiune de actualizare în loc de două intrări care au "D" și "I".

Referințe

Aflați despre terminologia pe care o utilizează Microsoft pentru a descrie actualizările de software.

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.