Sintomi
Quando si esegue un'istruzione Update complessa insieme a un suggerimento NOLOCK in una tabella in Microsoft SQL Server 2008, SQL Server 2012, SQL Server 2008 R2 o SQL Server 2014, potrebbe verificarsi un danneggiamento dell'indice non cluster. Inoltre, il messaggio di errore seguente può essere registrato nel log degli errori di SQL Server:
<data><ora> spid # Error: 8646, gravità: 21, stato: 1. <Data><ora> SPID # non è possibile trovare la voce di indice in ID indice 3, della tabella 2102402659, nel database ' <DatabaseName>'. L'indice indicato è danneggiato o si è verificato un problema con il piano di aggiornamento corrente. Eseguire DBCC CHECKDB o DBCC CHECKTABLE. Se il problema persiste, contattare il supporto tecnico. <data><ora> SPID # con "dbghelp. dll" versione "4.0.5" <Data><ora> SPID # * *-thread di dump-SPID = 0, EC = 0x0000000BD70624C0<Data><ora> SPID # * * * il dump dello stack viene inviato a Y:\MSSQL\MSSQL10. MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt><2 data><ora> SPID # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <Data><ora> SPID # * <Data><ora> SPID # * BEGIN stack DUMP: <Data><ora> SPID # * <Data><ora> SPID # <Data><ora> spid # * <Data><ora> SPID # * CPerIndexMetaQS:: ErrorAbort-indice di danneggiamento><0 Data><ora> SPID # *
Nota È possibile applicare un hint NOLOCK alle tabelle di origine in un'istruzione. Tuttavia, non è possibile applicare un suggerimento NOLOCK alle tabelle di destinazione in un'istruzione.
Causa
Questo problema si verifica perché l'hint NOLOCK fa in modo che la query non legga correttamente i valori nella tabella quando la query legge gli stessi valori più volte.
Risoluzione
Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo di SQL Server.
Aggiornamento cumulativo 1 per SQL Server 2014 /en-us/help/2931693
Aggiornamento cumulativo 11 per SQL Server 2012 /en-us/help/2908007
Aggiornamento cumulativo 7 per SQL Server 2012 SP1 /en-us/help/2894115
Aggiornamento cumulativo 13 per SQL Server 2008 SP3 /en-us/help/2880350
Aggiornamento cumulativo 9 per SQL Server 2008 R2 SP2 /en-us/help/2887606
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".