当服务器已注册时,如何解决在 [linked_server] 处使用execute(@sql) 时出现的“链接服务器错误”?

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

我有一个需求,通过Sql Server中的链接服务器链接到云端的Oracle服务器。

我创建了一个存储过程来执行通用 PL/SQL 脚本,该脚本使用 Dapper 和存储过程调用返回 IEnumerable 列表。

存储过程是:

ALTER PROCEDURE [dbo].[Oracle_s] 
(
    @sql varchar(4000)
)
AS
BEGIN
    declare @result bit = 0;
    set nocount on;
    declare @temp nvarchar(4000) = 'SELECT * FROM OPENQUERY(LK_VPROD, ''' + REPLACE(@sql,'''', '''''') + ''')';
    
    begin try
        exec sp_executesql @temp;
        --execute(@sql ) at [LK_VPROD];
        set @result = 1;
    end try
    begin catch
        SELECT ERROR_MESSAGE() AS ErrorMessage; 
        set @result = 0;
    end catch
    set nocount off;
    return @result;
END

当我将它与 sp_executesql 编码一起使用时,它会产生正确的结果。

当我在 [LK_VPROD] 编码处将其与execute(@sql) 一起使用时,它返回“在 sys.servers 中找不到服务器”或最近“未为 RPC 配置服务器‘LK_VPROD’。”

我假设这是使用 SP 版本的执行的配置问题,因为其他版本工作正常。我想使用execute at版本,因为我不想为openquery构建sql脚本。

我在这里做错了什么?

我尝试更改linked_server的配置但无济于事。它仍然适用于基于 openquery 的构造脚本,但在执行脚本时仍然失败。

sql-server oracle linked-server
1个回答
0
投票

还要确保您可以从命令行 PING 它。

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