小编kan*_*anu的帖子

无法从链接服务器 X 的 OLE DB 提供程序“SQLNCLI”获取行集

我在通过链接服务器从同一个表进行并发读取时收到此错误。超时设置没问题。发生此错误时,我也开始收到相同查询的以下错误:

“事务(进程 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-server-2008 sql-server deadlock linked-server

3
推荐指数
1
解决办法
1万
查看次数

执行顺序删除和未提交读

我们正在使用动态 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提示会停止错误?

sql-server-2008 sql-server isolation-level nolock

3
推荐指数
1
解决办法
2694
查看次数