尝试运行远程存储过程并将结果存储到本地表时出错

问题描述 投票:0回答:1

我需要在远程服务器上执行存储过程,然后将结果写入 SQL Server 中的本地表。

当我运行它时,它执行的存储过程运行良好并在网格中返回结果:

exec LIVE.DatabaseName.dbo.myStoredProcedure

但是,当我尝试使用下面的代码将其插入本地表时,我收到此处显示的两个错误:

insert into localTable (Field1, Field2, Field3) 
    exec LIVE.DatabaseName.dbo.myStoredProcedure

链接服务器“LIVE”的 OLE DB 提供程序“MSOLEDBSQL”返回消息“合作伙伴事务管理器已禁用其对远程/网络事务的支持。”。

消息 7391,第 16 级,状态 2,第 29 行

无法执行该操作,因为链接服务器“LIVE”的 OLE DB 提供程序“MSOLEDBSQL”无法开始分布式事务。

在我的本地服务器上,我将

RPC Out
设置为
True

无论我做什么,我都想确保LIVE服务器(远程服务器)无法从本地服务器提取数据,因为本地服务器是开发服务器。我希望我的设置是可以将实时数据拉到开发中,但无法将开发数据拉到实时中。

编辑 - 如果我只在本地服务器上设置了链接服务器对象,而不是在远程服务器上设置,这会有所不同吗?另外,如何在不使用 SSIS 包的情况下完成此操作?

sql-server t-sql sql-server-2019
1个回答
0
投票
WITH RESULT SETS

声明来解决它:

select *
into x
from openquery(yoursrv, N'
  SET NOCOUNT ON;
  exec SomeProc
  with result sets ((part int, Location nvarchar(30), ...))')

使用结果集可以避免“元数据”错误,因为它声明了实际列,因此不需要执行 FMTONLY 元数据查找。

请注意,您可能需要在过程和/或执行的开头添加

SET NOCOUNT ON

以避免其他错误,例如

Cannot process the object "...". The OLE DB provider "SQLNCLI11" for linked server "..." indicates that either the object has no columns or the current user does not have permissions on that object.
    

© www.soinside.com 2019 - 2024. All rights reserved.