使用Nolock提示更新查询

时间:2014-02-18 14:20:42

标签: sql sql-server-2008-r2 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 个答案:

答案 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

对我来说很好。