You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于新版SQL Server中使用WITH(NOLOCK)是否需显式指定的问询

在最新SQL Server版本中使用NOLOCK的要求

是的,在最新版本的SQL Server(包括2022及后续版本)中,必须显式指定WITH(NOLOCK)才能让SELECT语句应用这个表提示的行为。

具体说明:

  • SQL Server默认的事务隔离级别是READ COMMITTED,不会自动启用NOLOCK对应的脏读规则。不管版本如何更新,默认行为都不会改变——你不明确写,就不会生效。
  • 有两种显式启用的方式:
    1. 单语句级别:在查询的表/视图后直接添加表提示,比如:
      SELECT Column1, Column2 FROM YourTargetTable WITH(NOLOCK);
      
      等价的写法也可以用READUNCOMMITTED,效果完全一致:
      SELECT Column1, Column2 FROM YourTargetTable WITH(READUNCOMMITTED);
      
    2. 会话级别:通过设置会话的隔离级别为READ UNCOMMITTED,这样该会话中后续所有SELECT都会自动应用等价于NOLOCK的规则:
      SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
      -- 之后的SELECT都会使用该隔离级别
      SELECT Column1, Column2 FROM YourTargetTable;
      
  • 注意:NOLOCK(或READ UNCOMMITTED)会允许脏读、不可重复读和幻读,只有当你的业务场景能接受这些数据一致性风险时,才应该使用,不要为了性能盲目滥用。

内容的提问来源于stack exchange,提问作者Luis Sandoval Monestel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:43:06