7

我试图在更新查询上加上一个 with(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”吗?

谢谢你的帮助

4

3 回答 3

6

(NOLOCK)禁用共享锁而不是排他锁。您可以使用 Read Committed 隔离级别来在 select 语句上放置排他锁。

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
UPDATE pth_patchLookup SET ScanDateTime = Getdate() WHERE RegID = 312
于 2014-02-18T15:09:50.317 回答
3

和这个?

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

对我来说工作得很好。

于 2016-05-18T18:32:17.757 回答
1

NOLOCK是一个选择(仅)提示,它对老程序员来说是一个坏习惯,因为它在 SQL Server 7 中几乎是强制性的,但从 SQL Server 2000 开始它就变得非常不必要了。该提示特别告诉引擎选择可以读取行,即使它处于未提交事务的中间。因此,您可能会遇到脏读或鬼读。

我强烈建议您阅读隔离级别以了解如何满足您的特定系统要求。

Obs:提示不是命令,您只是建议引擎接受提示,但引擎可以决定不使用它。

于 2014-02-18T17:02:32.380 回答