【问题标题】:Using transaction with SQL Server Linked Server - Transaction context in use by another session将事务与 SQL Server 链接服务器一起使用 - 另一个会话正在使用事务上下文
【发布时间】:2016-12-13 08:13:08
【问题描述】:

在一个存储过程中,我使用链接服务器在另一个数据库中进行一些插入/更新。已将代码包装在事务中。

CREATE PROCEDURE [mySchema].[mySP] (paramList)
AS
BEGIN
    SET NOCOUNT ON;
    SET XACT_ABORT OFF;
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

    DECLARE @TranStarted AS BIT = 0;

    BEGIN TRY
            IF @@TRANCOUNT = 0
            BEGIN
              BEGIN TRANSACTION;
              SET @TranStarted = 1;
            END 

   -- Do some stuff with linked server (inserts and updates on another server)

   IF @TranStarted = 1
      BEGIN
        COMMIT TRANSACTION;
      END
    END TRY

    BEGIN CATCH
        IF @TranStarted = 1
        BEGIN
            ROLLBACK TRANSACTION;
        END

        PRINT 'ERROR_NUMBER: ' + CAST(ERROR_NUMBER() AS NVARCHAR(10));
        PRINT 'ERROR_MESSAGE: ' + ERROR_MESSAGE();
        PRINT 'ERROR_SEVERITY: ' + CAST(ERROR_SEVERITY() AS NVARCHAR(2));
        PRINT 'ERROR_STATE: ' + CAST(ERROR_STATE() AS NVARCHAR(3));
        PRINT 'ERROR_PROCEDURE: ' + ERROR_PROCEDURE();
        PRINT 'ERROR_LINE: ' + CAST(ERROR_LINE() AS NVARCHAR(5));
    END CATCH           
END

结果如下:

ERROR_NUMBER: 3910
ERROR_MESSAGE: Transaction context in use by another session.
ERROR_SEVERITY: 16
ERROR_STATE: 2

ERROR_LINE: 1

我看过这个: Related track 但我想我没有任何环回链接服务器

StoredProcedure 可以在没有事务块的情况下正常工作

任何帮助将不胜感激。

【问题讨论】:

  • 这个你搞定了吗?

标签: sql-server tsql


【解决方案1】:

这可能不适合您的情况,但以防万一它适合您或其他人的情况......

在更新表时遇到“事务上下文正在使用中...”错误,该表的触发器引用了同一 SQL 服务器上的链接服务器并且连接字符串包含 ";MultipleActiveResultSets=true"。我正在向其中添加脚本的应用程序需要该功能。

但是,如果我使用没有MultipleActiveResultSets 的连接字符串,则应用程序能够成功更新表。在我们的 PROD 环境中,链接服务器连接到不同的服务器,但在我们的 DEV 环境中,它链接回同一服务器。将MultipleActiveResultSets 设置为 true,SQL Server 将尝试创建分布式事务并失败,因为它是一个环回(许多帖子表明 DTC 不支持)。

MultipleActiveResultSets 设置为 false(或在连接字符串之外),SQL Server 不会有环回问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多