分布式事务错误?

时间:2011-08-09 16:57:06

标签: sql sql-server-2005 tsql

在存储过程中,我使用以下语句。但是当我运行Stored Proc时,它会抛出Distributed transaction错误。

Declare @res int
    Declare @mes as varchar(100)

    DECLARE  @Result TABLE (
result INT,
mesage VARCHAR(100))

    Insert @Result (result, mesage)         
            Exec [MySpeNet].[dbo].[GetMemberShipStatus]'3319994'
    select @res = result, @mes = mesage from @Result

例外:

      Msg 7391, Level 16, State 2, Procedure GetMemberShipStatus, Line 19
    The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" 
for linked server "ASPQA" was unable to begin a distributed transaction.

OR

有没有其他方法可以在不创建Temp表的情况下存储结果和消息?

2 个答案:

答案 0 :(得分:3)

启用选项

  • 允许远程客户端
  • 允许出站

在“组件服务”中的“本地DTC属性”的“安全”选项卡上。

  • 转到“运行”,键入comexp.msc。
  • 双击“Console Root”。
  • 双击“组件服务。
  • 双击“计算机”。
  • 双击“我的电脑”。
  • 双击“Distributed Transaction Coordinator”。
  • 右键单击“分布式事务处理协调器”下的“本地DTC”,然后单击“属性”。
  • 点击“安全”标签。
  • 在复选框“允许远程客户端”和“允许出站”复选框上打勾。

答案 1 :(得分:3)

这对我有用:

在SQL Server Management Studio中,展开“服务器对象”,然后展开“链接服务器”,然后右键单击相关链接服务器并选择“属性”。选择“服务器选项”'页面,并确保'启用分布式交易的推广'设置为“假”'

或者你可以使用https://github.com/rmrevin/yii2-minify-view

来完成
USE master;
EXEC sp_serveroption '<<your linked server name>>', 'remote proc transaction promotion', 'false';