我有两个表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)