Accedi a Microsoft
Accedi o crea un account.
Salve,
Select a different account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Quando si esegue un aggiornamento su una tabella che contiene un indice cluster o univoco e l'aggiornamento si verifica in una colonna univoca non primaria, il record di rilevamento delle modifiche non è coerente con l'istruzione update.

Si supponga ad esempio che una colonna denominata "column1" sia inclusa nell'indice cluster o univoco. Quando il valore della colonna viene modificato da un valore più grande a un valore inferiore, ad esempio modificando il valore da 20 a 16, la tabella laterale di rilevamento delle modifiche riceve l'operazione di inserimento prima dell'operazione di eliminazione. Ad esempio, l'operazione di inserimento record di riga del log delle transazioni viene ricevuta prima dell'operazione di eliminazione della riga o la "I" viene inserita prima di "D".

Sys_change_version

sys_change_create_version

sys_change_operation

sys_change_column

sys_change_context

PK_column

1116

19

Ho

NULL

NULL

5639485628

1116

20

D

NULL

NULL

5639485628


Quando il valore della colonna viene modificato da un valore più piccolo a un valore più grande (ad esempio cambiando il valore da 16 a 20), prima di "I" viene inserito "D".

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

Ho

NULL

NULL

5639485628

Causa

Questo problema si verifica a causa di un ordinamento errato tra le coppie di eliminazione/inserimento nella tabella laterale di rilevamento delle modifiche.

Risoluzione

La correzione di questo problema è inclusa negli aggiornamenti seguenti per SQL Server:

         Aggiornamento cumulativo 8 per SQL Server 2017

         Aggiornamento cumulativo 9 per SQL Server 2016 Service Pack 1

Aggiornamento cumulativo 12 per SQL Server 2014 SP2

Informazioni sulle build SQL Server

Ogni nuova build per SQL Server contiene tutti gli aggiornamenti rapidi e le correzioni per la sicurezza inclusi nella build precedente. È consigliabile installare la build più recente per SQL Server:

Ultimo aggiornamento cumulativo per SQL Server 2017

build più recente per SQL Server 2016

Ultimo aggiornamento cumulativo per SQL Server 2014

Stato

Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Ulteriori informazioni

Per una tabella abilitata per il rilevamento delle modifiche, quando si verifica un aggiornamento in una colonna non primaria definita univoca, nella tabella laterale di rilevamento delle modifiche vengono inserite due voci: una per ogni azione di divisione, Inserisci ed Elimina.

Quando si chiama la funzione CHANGETABLE per enumerare le modifiche, queste voci vengono ordinate in base ai valori di chiave primaria e quindi le operazioni vengono aggregate. Se l'aggiornamento inserisce un valore inferiore, viene prima eseguita un'operazione "I" sulla tabella laterale, seguita da un'operazione "D". In questo modo viene restituita un'operazione non corretta per questa riga. Il motivo è che "I" seguito da "D" viene aggregato come "D".

Poiché solo i valori di chiave primaria vengono mantenuti nelle tabelle laterali, non è necessario avere due voci separate. Ciò vale a condizione che la colonna di chiave primaria non venga aggiornata.

Questo problema è stato risolto per le colonne univoche non primarie. In questo caso, quando si verifica l'aggiornamento, viene inserita una sola riga includendo "U" come operazione di aggiornamento invece di due voci con "D" e "I".

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?

Grazie per il feedback!

×