如何将输出参数传递给存储过程?

问题描述:

我写了一个存储过程具有以下格式:如何将输出参数传递给存储过程?

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 

然后,我执行过程:

DECLARE @finaloutput1 varchar(300) 

EXEC usp_data_migration 'Yousuf', 'emp', '[City Branch]', 'emp_tgt', @finaloutput1 output 

SELECT @finaloutput1 

通过执行这种方式我不正确的输出。

当我执行这种方式:

DECLARE @finaloutput1 varchar(300) 

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

SELECT @finaloutput1 

我得到一个错误消息说:

消息119,15级,状态1,第41行
必须通过参数号5和后续参数为'@name = value'。在使用'@name = value'形式后,所有后续参数必须以'@name = value'的形式传递。

如果我删除了我的输出参数并执行过程,我得到了我想要的输出,但是我无法将我的结果作为输出。

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

我该怎么办?

在此先感谢。

你必须选择这样

例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 

例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 @SQLString NVARCHAR(500) 
DECLARE @ParmDefinition NVARCHAR(500) 
DECLARE @parmIN VARCHAR(10) 
DECLARE @parmRET1 VARCHAR(30) 
DECLARE @parmRET2 VARCHAR(30) 
SET @parmIN=' returned' 
SET @SQLString=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 
    @SQLString, 
    @ParmDefinition, 
    @[email protected], 
    @[email protected] OUTPUT,@[email protected] OUTPUT 

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2" 
go 
drop procedure Myproc 

Please refer more here

错误消息是不言自明的 - 您应该命名所有参数。

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; 

简单的例子:

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 [email protected]); 
end 

declare @maxid int; 
declare @maxname varchar(10); 
exec proc2 @maxid out,@maxname out; 
select @maxid,@maxname;