首页 > 解决方案 > 使用 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>') //这样我们可以运行一个没有任何参数的过程

标签: sqlsql-server-2008database-administration

解决方案


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

推荐阅读