sql - 使用 i/p 和 o/p 参数从链接服务器执行过程的 Openquery
问题描述
我需要使用 openquery() 从链接服务器执行一个过程
create procedure test(@ip varchar(10),@op varchar(10) output)
as
begin
if @ip='a'
begin
set @op='Success'
end
end
如果假设过程像上面那样,我需要通过将 i/p 作为 @ip 变量传递来返回 @op 变量的 o/p
SP 使用此代码成功执行,但需要使用 openquery() 运行。
declare @op varchar(10)
execute <servername>.<dbname>.dbo.test 'a',@op OUTPUT
select @op
如何将o / p参数传递给openquery
select * from openquery (<servername>,'execute <dbname>.dbo.<sp_name>')
//这样我们可以运行一个没有任何参数的过程
解决方案
Create Procedure [dbo].[StoredProcedureName]
@paramOne varchar(13),
@paramTwo varchar(2),
@paramThree varchar(30)
As
Begin Try
DECLARE @param_in_1 VARCHAR(13);
DECLARE @param_in_2 VARCHAR(2);
DECLARE @param_in_3 VARCHAR(20);
DECLARE @param_out_1 INT = 2;
DECLARE @param_out_2 VARCHAR(300);
SET @param_in_1 = @paramOne;
SET @param_in_2 = @paramTwo;
SET @param_in_3 = @paramThree;
EXECUTE ('BEGIN OracleStoredProcedureName(?,?,?,?,?); END;', @param_in_1, @param_in_2, @param_in_3, @param_out_1 OUTPUT, @param_out_2 OUTPUT) AT LkServerName;
SELECT @param_out_1, @param_out_2;
End Try
Begin Catch
DECLARE @ErrorNumber INT = ERROR_NUMBER();
DECLARE @ErrorLine INT = ERROR_LINE();
DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE();
DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
DECLARE @ErrorState INT = ERROR_STATE();
DECLARE @CompleteErrorMessage varchar(150);
Print 'ErrorMessage: ' + @ErrorMessage;
Print 'Severity: ' + CAST(@ErrorSeverity AS VARCHAR(10));
Print 'State: ' + CAST(@ErrorState AS VARCHAR(10));
Print 'Error Number: ' + CAST(@ErrorNumber AS VARCHAR(10));
Print 'Line: ' + CAST(@ErrorLine AS VARCHAR(10));
End Catch
推荐阅读
- php - PHP - 比较两个数组,如果有重复,则删除所有匹配项
- django - 如何在 django 2.2 的一个基于类的视图中收集所有模型中的所有对象
- asp.net-core - .Net Core 2.2 Web API 项目中的 ANCM Out of Process --
- testing - 如何比较迭代器?
- angular - 如何从角度库中的 package.json 获取版本
- python - 对象返回后是否可以删除?
- postgresql - 如何读取 PostgreSQL JIT 的配置文件结果
- javascript - window.open(url) 在新标签中打印 url 而不是打开 url
- python - 为什么我在使用 scrapy 进行抓取时会出现 403 错误?
- go - 使用 go-redis/redis 在 Golang 中进行 Multi WATCH