Обновить запрос с подсказкой 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
Работает нормально для меня.