0

我们在 SQL Server 2005 上有一个针对 DB2 的链接服务器。当我们尝试将来自链接服务器的简单查询结果集放入临时表时,返回此错误。

链接服务器“SOMEDSN”的 OLE DB 提供程序“MSDASQL”返回消息“[IBM][CLI Driver] SQL0998N 事务或启发式处理期间发生错误。原因代码 =“16”。子代码 =“2-8004D026”。SQLSTATE=58005“ . 消息 7391,级别 16,状态 2,第 21 行 由于链接服务器“SOMEDSN”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务,因此无法执行操作。

DECLARE @FilterCode varchar(20);
Set @FilterCode = '11122';

Create Table #TmpTable (
    Id Int
)

Insert Into #TmpTable
EXEC ('Select A.Id From SCM1.DB2TBL1 A Where A.FilterCode = ?', @FilterCode) At SOMEDSN;

Exec 在显示正确的结果集的情况下工作得很好,但是一旦我们尝试将结果集放入临时表中,就会出现错误。

我在这里和许多其他地方搜索并尝试了以下内容。

  1. sp_configure '远程进程传输', 0
  2. 在 Linked Server Properties > Server Options 上将“Enable Promotion of Distributed Transactions”设置为 false。我没有看到这个选项。
  3. 在链接服务器属性 > RPC 上,RPC 输出和分配器设置为值 TRUE
  4. 使用了 Openquery,但它不能使用动态 SQL 或传递参数。

该表包含很多行。我们需要在 DB2 端执行查询,根据参数减少结果集。

任何帮助都将被大大占用!

4

1 回答 1

0

您是否启动了 MSDTC 服务 (DTC)?

在 Windows 2008 下:

  • 从管理工具->组件服务->计算机->我的电脑:本地 DTC。右键单击属性,转到 MSDTC 选项卡并选择“安全配置”。
  • 启用“网络 dtc 访问”和“允许出站”复选框。
  • 启用“无需身份验证”复选框

如果这不起作用,请尝试禁用连接池

于 2013-02-26T00:14:03.147 回答