我在用链接服务器上的过程调用的结果集填充临时表时遇到问题,在这个临时表中,又调用了另一个服务器上的过程。
SET @sqlCommand = 'INSERT INTO #tblTemp ( ModuleID, ParamID) ' +
'( SELECT * FROM OPENQUERY(' + @targetServer + ', ' +
'''SET FMTONLY OFF; EXEC ' + @targetDB + '.usr.sproc2 ' + @param + ''' ) )'
exec ( @sqlCommand )
现在在调用的sproc2中,我再次调用另一个链接服务器上的第三个过程sproc3,它返回我的结果集。
SET @sqlCommand = 'EXEC ' + @targetServer +'.database.usr.sproc3 ' + @param
exec ( @sqlCommand )
整个过程都不起作用,因为我得到了一个SQL错误7391
无法执行该操作,因为链接服务器“%ls”的OLE DB访问接口“%ls”无法开始分布式事务。
我已经查过了
microsoft article
,但没有成功。
但也许,我可以更改存储过程1中的代码。除了temp表和open查询之外,还有其他方法吗?
或者我不可能做我想做的事?microsft的文章指出:
检查目标服务器上引用的对象。如果它是一个视图或存储过程,或者导致触发器的执行,请检查它是否隐式引用另一个服务器。如果是这样,第三台服务器就是问题的根源。直接在第三台服务器上运行查询。如果不能直接在第三台服务器上运行查询,那么问题实际上不是链接服务器查询的问题。先解决根本问题。
这是我的案子吗?
PS:我无法避免三台服务器的架构。