Comment passer le paramètre de sortie à une procédure stockée?

J'ai écrit une procédure stockée avec le format suivant:

ALTER PROCEDURE usp_data_migration (@sourceDatabase varchar(50), @sourceTable varchar(50), @targetDatabase varchar(50), @targetTable varchar(50), @finaloutput varchar(max) output) AS BEGIN ----Set of SQL Blocks END 

Ensuite, j'exécute la procédure:

 DECLARE @finaloutput1 varchar(300) EXEC usp_data_migration 'Yousuf', 'emp', '[City Branch]', 'emp_tgt', @finaloutput1 output SELECT @finaloutput1 

En exécutant de cette manière, je ne produis pas correctement.

Quand j'exécute de cette manière:

 DECLARE @finaloutput1 varchar(300) EXEC usp_data_migration @sourceDatabase = 'Yousuf', @sourceTable = 'emp', @targetDatabase = '[City Branch]', @targetTable = 'emp_tgt', @finaloutput1 output SELECT @finaloutput1 

Je reçois un message d'erreur disant:

Msg 119, niveau 15, état 1, ligne 41
Doit passer le paramètre numéro 5 et les parameters suivants comme '@name = valeur'. Après avoir utilisé la forme '@name = value', tous les parameters suivants doivent être passés sous la forme '@name = value'.

Et si je supprime mon paramètre de sortie et que j'exécute la procédure, j'obtiens la sortie désirée mais je n'arrive pas à get mon résultat en sortie.

 EXEC usp_data_migration @sourceDatabase = 'Yousuf', @sourceTable = 'emp', @targetDatabase = '[City Branch]', @targetTable = 'emp_tgt' 

Que devrais-je faire?

Merci d'avance.

Vous devez sélectionner comme ceci

Exemple 1

  create procedure p1 ( @id INT, @name varchar(20) OUTPUT, @company varchar(20) OUTPUT ) AS BEGIN Set @name = 'name' Set @company = 'company' select @name , @company from table1 where id = @id; END GO 

Exemple 2

 CREATE PROCEDURE Myproc @parm varchar(10), @parm1OUT varchar(30) OUTPUT, @parm2OUT varchar(30) OUTPUT AS SELECT @parm1OUT='parm 1' + @parm SELECT @parm2OUT='parm 2' + @parm GO DECLARE @SQLSsortingng NVARCHAR(500) DECLARE @ParmDefinition NVARCHAR(500) DECLARE @parmIN VARCHAR(10) DECLARE @parmRET1 VARCHAR(30) DECLARE @parmRET2 VARCHAR(30) SET @parmIN=' returned' SET @SQLSsortingng=N'EXEC Myproc @parm, @parm1OUT OUTPUT, @parm2OUT OUTPUT' SET @ParmDefinition=N'@parm varchar(10), @parm1OUT varchar(30) OUTPUT, @parm2OUT varchar(30) OUTPUT' EXECUTE sp_executesql @SQLSsortingng, @ParmDefinition, @parm=@parmIN, @parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2" go drop procedure Myproc 

S'il vous plaît se référer plus ici

Le message d'erreur est explicite – vous devriez nommer tous vos parameters.

 DECLARE @finaloutput1 varchar(300); EXEC dbo.usp_data_migration -- always use schema prefix @sourceDatabase = 'Yousuf', @sourceTable = 'emp', @targetDatabase = '[City Branch]', @targetTable = 'emp_tgt', @finaloutput = @finaloutput1 OUTPUT; SELECT @finaloutput1; 

Exemple simple:

 create procedure proc2 @var int out,@var2 varchar(10) out as begin set @var=(select max(id) from customer); set @var2=(select name from customer where id=@var); end declare @maxid int; declare @maxname varchar(10); exec proc2 @maxid out,@maxname out; select @maxid,@maxname;