我在通过链接服务器从同一个表进行并发读取时收到此错误。超时设置没问题。发生此错误时,我也开始收到相同查询的以下错误:
“事务(进程 ID X)在锁定资源上与另一个进程发生死锁,并已被选为死锁受害者。重新运行事务..”
这是否意味着可以通过链接服务器执行的读取数量有限制?如果是这样,限制是多少?或者这可能是因为其他原因吗?
此外,使用的查询如下:
SELECT T.Col1, T.Col2, T.Col3, PG.Col1, PG.Col2, PG.Col3
INTO #TMP_OUTPUT
FROM linkedserver1.db1.dbo.table1 T WITH (NOLOCK)
INNER JOIN #temp2 PG
ON T.Col1 = PG.Col1
WHERE T.Col3 = somevalue
Run Code Online (Sandbox Code Playgroud)
谢谢,卡努
我们正在使用动态 SQL 运行以下查询,当我们运行并发实例时,它会在少数情况下出错。错误是:
由于数据移动,无法使用 NOLOCK 继续扫描...
这个问题说当一个进程读取另一个进程正在删除的数据时会抛出这个错误。我们的过程是删除和读取相同的行,但是按照以下查询一个接一个地读取(在SELECT
之后DELETE
):
DELETE FROM Table1
WHERE colum1 = somevalue1
AND column2 = somevalue2
SELECT COUNT(*)
FROM Table1 WITH (NOLOCK)
WHERE colum1 = somevalue1
AND column2 = somevalue2
Run Code Online (Sandbox Code Playgroud)
我试图了解上述查询的执行。由于SELECT
未提交,它是否在提交之前开始执行DELETE
?这是否意味着删除NOLOCK
提示会停止错误?