Проблемы
При выполнении сложного оператора обновления вместе с подсказкой NOLOCK для таблицы в Microsoft SQL Server 2008, SQL Server 2012, SQL Server 2008 R2 или SQL Server 2014 может возникнуть повреждение некластеризованного индекса. Кроме того, в журнале ошибок сервера SQL Server может регистрироваться следующее сообщение об ошибке:
<дата><время> spid # ошибка: 8646, серьезность: 21, состояние: 1. <Дата><. время> SPID # не удается найти элемент указателя в индексе с идентификатором 3 в таблице 2102402659, в базе данных "<DatabaseName>". Указанные индексы повреждены, или возникла проблема с текущим планом обновления. Выполните инструкции DBCC CHECKDB или DBCC CHECKTABLE. Если проблема не устранена, обратитесь в службу технической поддержки. <дата><время> SPID # с помощью "dbghelp. dll ' version ' 4.0.5 ' <Дата><время> SPID # * dump Thread-SPID = 0, EC = 0x0000000BD70624C0<Дата><время> SPID MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt><2 дата><время> SPID # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <даты><время> SPID # * <Дата><время> SPID# <><Дата>время <SPID # Дата><время> SPID # * <Дата><время> SPID # * CPerIndexMetaQS:: ErrorAbort — повреждение индекса><0 Дата><время> SPID # *
Примечание.Подсказка NOLOCK может применяться к исходным таблицам в инструкции. Однако вы не можете применить подсказку NOLOCK к целевым таблицам в инструкции.
Причина
Эта проблема возникает из-за того, что подсказка NOLOCK приводит к ошибочному чтению запроса значений в таблице, если запрос считывает одинаковые значения несколько значений.
Решение
Эта проблема впервые устранена в следующем накопительном обновлении SQL Server.
Накопительное обновление 1 для SQL Server 2014 /en-us/help/2931693
Накопительное обновление 11 для SQL Server 2012 /en-us/help/2908007
Накопительное обновление 7 для SQL Server 2012 с пакетом обновления 1 (SP1) /en-us/help/2894115
Накопительное обновление 13 для SQL Server 2008 с пакетом обновления 3 (SP3) /en-us/help/2880350
Накопительное обновление 9 для SQL Server 2008 R2 с пакетом обновления 2 (SP2) /en-us/help/2887606
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".