在 SQL Server 数据库中,UPDATE 和 DELETE 语句中的目标表上的WITH (NOLOCK) 查询提示将被忽略。但是,这是否也适用于更新或删除连接中包含的表?例如,是:
update t
set value1 = 123
FROM mytable t
inner join othertable o with (nolock) on t.id = o.id
相当于:
update t
set value1 = 123
FROM mytable t
inner join othertable o on t.id = o.id
不,它没有被忽略。这很容易测试。
设置
连接1
连接 2(虽然上面仍在运行)
未提交的
999
值用于更新,而不是像100
在 RCSI 上运行时没有提示的情况那样,或者在 RC 锁定隔离级别上运行时被阻止。请注意,该
999
值从未实际提交,othertable
因此此处的使用NOLOCK
意味着持续存在的状态在mytable
逻辑上从未存在过。