存储过程(简单)
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 行)