我有以下内容:
CREATE PROCEDURE dbo.p_create_new_message
AS
BEGIN
DECLARE @li_count INTEGER
IF @li_count <> 2
BEGIN
RETURN 11;
END
RETURN 12;
END
我希望获得11
,但我得12
。为什么呢?
答案 0 :(得分:4)
首先,我认为使用存储过程返回值是不错的做法,除非它们是特定的状态值。相反,请使用output
参数。
但原因是因为@li_count
的默认值为NULL
。几乎所有与NULL
的比较都会返回NULL
或false
- 两者都不正确。
我认为程序应该写成:
CREATE PROCEDURE dbo.p_create_new_message (
@retval INTEGER OUTPUT
) AS
BEGIN
DECLARE @li_count INTEGER ;
IF @li_count <> 2 OR @li_count IS NULL
BEGIN
@retval = 11;
return;
END;
@retval = 12;
END;
答案 1 :(得分:0)
NULL不是值,不能直接与其他值比较
CREATE PROCEDURE dbo.p_create_new_message
AS
BEGIN
DECLARE @li_count INTEGER
IF ISNULL(@li_count,0) <> 2
BEGIN
RETURN 11;
END
RETURN 12;
END