Openquery для выполнения процедуры со связанного сервера с параметрами i / p и o / p - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно выполнить процедуру со связанного сервера, используя openquery ()

create procedure test(@ip varchar(10),@op varchar(10) output)  
as  
begin  
if @ip='a'  
begin  
set @op='Success'  
end  
end

, если предположить, что процедура такая же, как указано выше, и мне нужно вернуть переменную o / p @op, передав i/ p как @ip переменная

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>') // так мы можем запустить процедуру, у которой нет параметров

1 Ответ

0 голосов
/ 25 апреля 2019
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
...