我有一个需求,通过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 的构造脚本,但在执行脚本时仍然失败。
还要确保您可以从命令行 PING 它。