2014-01-11 126 views
6

我寫了一個存儲過程具有以下格式:如何將輸出參數傳遞給存儲過程?

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' 

我該怎麼辦?

在此先感謝。

回答

7

你必須選擇這樣

例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

5

錯誤消息是不言自明的 - 您應該命名所有參數。

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; 
0

簡單的例子:

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; 
相關問題