我有一个从 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”之类的语句,但没有用。