sql-server - 如何从 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
解决方案
对将来来到这里的任何人进行更新,我能够通过以下方式解决问题:
第一个是设置本地 DTC - 请参阅 Windows Server 2012 分布式事务协调器。
第二个是,在每个链接服务器的属性中,将“启用分布式事务提升”设置为 FALSE。
推荐阅读
- java - What is a good way to display status of a file using Swing
- python - DataFrame - 带标准的逐行算术
- javascript - Search key and return value in nested object
- reactjs - 类未应用于输入元素 reactjs
- cucumber - How to validate a REST Assured request across multiple java methods?
- c++ - 在浅拷贝上调用删除不会爆炸
- javascript - 谷歌翻译中不显示文本区域建议框中的 Onkeypress
- angular - 如何更新子模型而不重置整个视图?
- azure - Azure AD 的 saml 响应中缺少自定义声明
- reactjs - 将日期和时间合并到一个时刻对象中以与今天进行比较