首页 > 解决方案 > 如何从 Oracle Query 将 EXECUTE (@myQuery) AT [LinkedServer] 的结果填充到临时表中

问题描述

我在 MSSQL Server 中有一个链接的 Oracle 服务器,我正在尝试将查询结果返回到临时表中。查询超过 8,000 个字符,所以我不能使用我通常使用的 OPENQUERY()。我可以运行以下命令,并查看启用 RPC 后的结果。

/*
Declare query variable, since query is more than 8,000 characters
*/
DECLARE @myQuery VARCHAR(MAX)

/*
Set query
*/
SET @myQuery = 'Query text here'

EXECUTE (@myQuery) AT ServerName

到目前为止我已经尝试过:

/* 
Declare query variable, since query is more than 8,000 characters 
*/ 
DECLARE @myQuery VARCHAR(max) 

/* 
Create temp table 
*/ 
CREATE TABLE ##temptable
  ( 
     field NVARCHAR(50) 
  ) 

/* 
Set query 
*/ 
SET @myQuery = 'Query text here' 

INSERT INTO temptable(field)
EXECUTE (@myQuery) at servername 

但是,这会从 MSSQL 返回以下错误消息:

链接服务器“ServerName”的 OLE DB 提供程序“OraOLEDB.Oracle”返回消息“无法加入事务。”。消息 7391、级别 #、状态 #、行 # 无法执行操作,因为链接服务器“ServerName”的 OLE DB 提供程序“OraOLEDB.Oracle”无法开始分布式事务。

任何帮助/方向将不胜感激。

更新

我已经尝试了以下方法,它返回了相同的消息。

/*  
Declare query variable, since query is more than 8,000 characters
*/  
DECLARE @myQuery VARCHAR(max) 

/*  
Set query  
*/  
SET @myQuery = 'Query text here' 

DECLARE @table TABLE(  field NVARCHAR(50) ) 

INSERT INTO @table(field)
EXECUTE (@myQuery) at servername

标签: sql-serveroracle

解决方案


对将来来到这里的任何人进行更新,我能够通过以下方式解决问题:

第一个是设置本地 DTC - 请参阅 Windows Server 2012 分布式事务协调器。

第二个是,在每个链接服务器的属性中,将“启用分布式事务提升”设置为 FALSE。


推荐阅读