【发布时间】:2019-09-05 12:45:56
【问题描述】:
我在 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, Level #, State #, Line # 操作无法执行 因为链接服务器“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
【问题讨论】:
-
你试过用表变量代替临时表吗?
-
@PeterHE 是的;我试图用该字段声明一个表,然后将其插入其中,我得到了相同的消息。
-
您可以尝试将远程调用 sql 包装到一个 SP (sp1) 中的 Oracle t,然后在您的主 SP 中调用该 SP,如:INSERT EXEC sp1
标签: sql-server oracle