小编SQL*_*ner的帖子

内部联接和锁定

我有两个表TableA,TableB其中包含我想要检索和同时更新的信息.我用的时候

SELECT TOP 2 SomeFieldA
FROM TableA WITH (ROWLOCK , UPDLOCK , READPAST)
Run Code Online (Sandbox Code Playgroud)

一切正常,Process 1看到第1行和第2行,而Process 2看到第3行和第4行.这是预期的行为.此外,当我执行时,EXEC sp_lock我只看到两个KEY条目.但是,当我将语句更改为

SELECT TOP 2 SomeFieldA
FROM TableA WITH (ROWLOCK , UPDLOCK , READPAST)
INNER JOIN
Table B WITH ( ROWLOCK , UPDLOCK , READPAST )
ON TableA.ID = TableB.IDRef`
Run Code Online (Sandbox Code Playgroud)

第一个进程看到第1行和第2行,但进程2看不到任何内容.执行sp_lock显示现在所有行都被阻止.为什么会这样?

编辑:执行计划:

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.1" Build="10.50.1617.0" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="2" StatementEstRows="2" StatementId="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" StatementSubTreeCost="0.00670141" StatementText="SELECT TOP 2 …
Run Code Online (Sandbox Code Playgroud)

sql-server locking inner-join

5
推荐指数
1
解决办法
3766
查看次数

标签 统计

inner-join ×1

locking ×1

sql-server ×1