我正在尝试在更新查询中添加(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'?
感谢您的帮助
答案 0 :(得分:1)
(NOLOCK)
禁用共享锁而不是独占锁。
您可以使用Read Committed隔离级别对select语句进行独占锁定。
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
UPDATE pth_patchLookup SET ScanDateTime = Getdate() WHERE RegID = 312
答案 1 :(得分:0)
NOLOCK是一个选择(唯一)的提示,这对于老程序员来说是一个坏习惯,因为它在SQL Server 7中几乎是强制性的,但是从SQL Server 2000开始它是最不必要的。 该提示特别告诉引擎即使它处于未通信事务的中间,select也可以读取行。因此,您可能会遇到脏或重读。
我强烈建议您阅读隔离级别,了解如何满足您的特定系统要求。
答案 2 :(得分:0)
这个?
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
对我来说很好。