首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Nolock提示更新查询

使用Nolock提示更新查询
EN

Stack Overflow用户
提问于 2014-02-18 22:20:42
回答 3查看 35.2K关注 0票数 5

我正在尝试将with(NOLOCK)放在更新查询上:

代码语言:javascript
复制
UPDATE pth_patchLookup with(nolock) SET ScanDateTime = Getdate() WHERE RegID = 312

但我得到了以下信息:

代码语言:javascript
复制
NoLock hint is supported only with Select statement and not with update, insert and delete.

有没有什么方法可以让我在这个更新查询上应用一个‘NOLOCK’?

谢谢你的帮助

EN

回答 3

Stack Overflow用户

发布于 2014-02-18 23:09:50

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

代码语言:javascript
复制
SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
UPDATE pth_patchLookup SET ScanDateTime = Getdate() WHERE RegID = 312
票数 6
EN

Stack Overflow用户

发布于 2016-05-19 02:32:18

那这个呢?

代码语言:javascript
复制
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

对我来说工作得很好。

票数 3
EN

Stack Overflow用户

发布于 2014-02-19 01:02:32

since 是一个select (仅)提示,对于较老的程序员来说,这是一个坏习惯,因为它在SQL Server7中几乎是强制性的,但从SQL Server2000开始,它几乎是不必要的。该提示特别告诉引擎,select可以读取行,即使它处于未提交事务的中间。正因为如此,你可能会遇到脏读或鬼读。

我强烈建议您阅读有关隔离级别的信息,以了解如何满足您的特定系统需求。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21856563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档