SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)

Posted PowerCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)相关的知识,希望对你有一定的参考价值。

本人经过百度查找并且自己进行测试得到问题原因:

MSDN上看了一下说是sql server 不支持在分布式事务处理中存在指向本地的链接服务器(环回链接服务器) 通过上面简单说明大家有可能没完全理解环回链接服务器的意思。下面直接来几段代码相信大家就明白了

1.打开本机SQL Server Management Studio工具,连接一个数据库服务器

这里使用本机数据库服务器。

2.在本机数据库服务器上建一个链接服务器连接的地址就是本机服务器,名称为 LS_Test。

3.假设本地数据库服务器下有

  数据库A

  数据库B

     数据库B中有dbo.Test表

4.在数据库A中创建如下存储过程

CREATE PROCEDURE [dbo].[PrPs_TestA]
AS 
SET XACT_ABORT ON

BEGIN TRAN
    EXEC LS_TEST.B.dbo.PrTestB    
COMMIT TRAN

5.在数据库B下创建如下存储过程

CREATE PROCEDURE [dbo].[PrTestB]
@OV_ReturnMss VARCHAR(128) OUTPUT
AS 
BEGIN        
    SELECT * FROM LS_TEST.B.dbo.Test
END

6.在数据库A下执行存储过程dbo.PrTestA

exec dbo.PrTestA

就会出现如下错误:

其他会话正在使用事务的上下文。

相信大家已经明白什么叫做环回链接服务器,当我们把数据库B中的存储过程dbo.PrTestB的链接服务器访问改成跨库访问,如:

SELECT * FROM B.dbo.Test

问题就解决。

所以各位以后在使用事务时一定要注意避免这个问题的发生,希望对各位有所帮助!

 

原文链接

 

以上是关于SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)的主要内容,如果未能解决你的问题,请参考以下文章

在mysql中存储会话

关于sqlserver中存储过程里面in关键字的使用

SQL Server 的锁定和阻塞

PHP:会话中的会话?

SQLSERVER服务器的CPU 100%紧急对应:查询占CPU高的session并KILL

sql server block如何查询并kill