我们有一个针对SQLServer2005上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工作得很好,显示了正确的结果集,但一旦我们尝试将结果集放入临时表中,就会出现错误。
我搜索了这里和许多其他地方,并尝试了以下内容。
- sp_configure"远程进程传输",0
- 在"链接服务器属性">"服务器选项"中将"启用分布式事务的提升"设置为false。我没有看到这个选项
- 在链接服务器属性>RPC上,RPC输出和分发服务器的值设置为TRUE
- 已使用Openquery,但不能使用动态SQL或传递参数
这个表包含很多行。我们需要在DB2端执行查询,以减少基于参数的结果集。
任何帮助都会被大量占用!
您是否已启动MSDTC服务(DTC(?
在Windows 2008下:
- 从管理工具->组件服务->计算机->我的计算机:本地DTC。右键单击"属性",转到MSDTC选项卡,然后选择"安全配置">
- 启用"网络dtc访问"one_answers"允许出站"复选框
- 启用"无需身份验证"复选框
如果不起作用,请尝试禁用连接池。