Обновить запрос с подсказкой Nolock

Я пытаюсь поставить с (NOLOCK) на запрос обновления:

UPDATE pth_patchLookup with(nolock) SET ScanDateTime = Getdate() WHERE RegID = 312

но я получаю следующее сообщение:

NoLock hint is supported only with Select statement and not with update, insert and delete.

Есть ли способ, которым я могу применить NOLOCK к этому запросу на обновление?

Спасибо за любую помощь

3 ответа

(NOLOCK) отключает общие блокировки, а не эксклюзивные блокировки. Вы можете использовать уровень изоляции Read Committed, чтобы установить исключительную блокировку для операторов выбора.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
UPDATE pth_patchLookup SET ScanDateTime = Getdate() WHERE RegID = 312

NOLOCK - это выборочный (только) совет, и он очень плохая привычка для старых программистов, так как он был почти обязателен в SQL Server 7, но с SQL Server 2000 он больше всего не нужен. Эта подсказка, в частности, говорит движку, что select может читать строки, даже если он находится в середине незафиксированной транзакции. Из-за этого вы можете испытывать грязные или призрачные чтения.

Я настоятельно рекомендую вам прочитать об уровнях изоляции, чтобы узнать, как удовлетворить ваши конкретные системные требования.

И это?

UPDATE TOP (1000) v 
SET idSupervisor = a.supervisor
FROM    dbo.Venda_2014 v WITH ( NOLOCK )
INNER JOIN #supervidores_presentes a WITH (NOLOCK) ON v.IdVendedor = a.vendedor AND v.idEmpresaOriginal = a.empresa
WHERE   IdDistribuidor IN ( 40 )
        AND ISNULL(v.idSupervisor,0) = 0
        AND datAnoMesRef >= '201501' 
Go

Работает нормально для меня.

Другие вопросы по тегам