LinkedServer 中的 SQL Server 事务数量不匹配

问题描述 投票:0回答:0

我有一个从 ServerA 连接到 ServerB 的链接服务器。 在每个服务器中都有一个发起事务的 SP,并且需要在 ServerB.SP 中执行一个 ServerA.SP。 我的问题是,这样做时,出现错误:

EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。

我已经搜索了有关该错误的信息,但问题/答案不包括 linkedServers。这就是我来这里的原因。 代码大概就是这样,真的很简单:

CREATE OR ALTER PROCEDURE #DB1_sp
AS
BEGIN

        BEGIN TRY

            
            BEGIN TRANSACTION 
                EXEC [LinkedServer].[db].[Schema].[SP]
                    ... params ...


            COMMIT TRANSACTION

        END TRY
        BEGIN CATCH
        
            IF @@TRANCOUNT > 0
                BEGIN
                    ROLLBACK TRANSACTION;
                END
        
            EXEC [Logs].[SetError]
        END CATCH


END
GO


EXEC #DB1_sp

LinkedServer这边,SP几乎是一样的代码。事实上,如果我们删除 BEGIN TRANSACTION,我所有的代码都可以工作,但由于初始验证,这不是一个选项。

我已经尝试查看 DISTRIBUTED TRANSACTIONS、SAVE TRANSACTIONS 和“SET XACT_ABORT ON”之类的语句,但没有用。

sql-server transactions distributed-transactions nested-transactions
© www.soinside.com 2019 - 2024. All rights reserved.