2010-07-26 54 views
0

這裏是我的示例:如何讓存儲過程返回Varchar值?

ALTER PROCEDURE EmpFirstName 
    @myParam int, 
    @empFName varchar(20) output 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT @empFName = empfname 
    FROM FE_QEMP 
    WHERE empno = @myParam 
END 
GO 

myParam是輸入empFName將搭載輸出,所以程序 應該只需要1個參數,因爲empFName是輸出,但對我來說 我得到這個錯誤:

Msg 201, Level 16, State 4, Procedure EmpFirstName, Line 0 Procedure or function 'EmpFirstName' expects parameter '@empFName', which was not supplied.

這就是我所謂的程序的方式:

DECLARE @returnValue varchar(20) 
EXEC @returnValue = EmpFirstName 10 
SELECT 'Return Value ' = @returnValue 
+0

你嘗試過在你SQL轉換它: CONVERT(VARCHAR(20) ,col)as newcol 我沒有嘗試過自己,但我認爲它會工作 – 2010-07-26 02:40:33

回答

4

返回值和outpu t參數是兩個不同的東西。如果你想與一個輸出參數來調用它,你會做這樣的:

EXEC EmpFirstName 10, @returnValue OUTPUT 

SELECT 'Return Value ' + @returnValue 

如果你想調用它,你在你的例子所描述的方式,那麼你需要改變存儲過程狀態RETURNS VARCHAR(20)並刪除output參數。要返回值,您必須明確呼叫return。在你的例子中,你會爲declare一個變量,在select語句中指定它,然後調用return @varName

+0

解決!............ – 2010-07-26 02:46:52

1

謝謝。我的這個帖子出現在我的時刻。沒有意識到輸出參數在執行時也需要使用「輸出」標識符進行限定,而不僅僅是在程序中!

這裏是我的我的同事sql服務器noobs的測試工作。我使用的sqlcmd與SQL Server 2005

存儲過程:

/* :r procTest.sql */ 
if exists (select name from sysobjects where name="procTest" and type="P") 
    drop procedure procTest; 
go 

create procedure procTest 
/* Test stored procedure elements. */ 
    (@i_pt_varchar varchar(20), 
    @o_pt_varchar varchar(20) output) 
as 
begin 
    print "procTest"; 
    set @o_pt_varchar = "string coming out"; 
    print "@i_pt_varchar " + @i_pt_varchar; 
    print "@o_pt_varchar " + @o_pt_varchar; 
    return (0); 
end 
go 

的測試呼叫:

/* :r procTest.test.sql */ 
declare @returnFlag int; 
declare @i_varchar varchar(20); 
declare @o_varchar varchar(20); 

set @i_varchar = "string going in"; 
set @o_varchar = null; 

execute @returnFlag = procTest @i_varchar, @o_varchar output 
print "@returnFlag " + cast(@returnFlag as varchar(20)); 
print "after call"; 
print "@i_varchar " + @i_varchar; 
print "@o_varchar " + @o_varchar; 
go