日期:2014-05-19  浏览次数:20569 次

存储过程(简单)
CREATE   PROC   test_ret
(
@input_int   int   =0,
@bb   int     output   --   =9999
--set   @bb=14
)
AS  
IF   (@input_int=0)
    begin      
set   @bb=0
end
              RETURN   @bb    

IF   (@input_int> 0)
begin
set   @bb=1000
end
            RETURN   @bb      

IF   (@input_int <0)
begin
set   @bb=-1000
end
          RETURN   @bb  
 
go
--执行该存储过程:
DECLARE   @Ret_int   int
EXEC   test_ret   50,@Ret_int   output


最后提示:过程   'test_ret '   试图返回状态值   NULL,但不允许这样做。将改为返回状态值   0。(我不是给@bb赋值了吗???)


------解决方案--------------------
第一個 RETURN @bb 後面的代碼全部都不會執行

所以如果 @input_int=0 不成立的話 @bb就沒有被賦值

另外,存儲過程的輸出參數不需要return

可以這樣改

CREATE PROC test_ret
(
@input_int int =0,
@bb int output
)
AS
begin
set @bb = case when @input_int = 0 then 0
when @input_int < 0 then -1000
when @input_int > 0 then 1000
end
end

--調用存儲過程
declare @bb int
exec test_ret 10, @bb output
select @bb

--將返回
value
-----------
1000

(所影响的行数为 1 行)