从SQL中的IF语句返回INTEGER

时间:2017-01-03 01:33:23

标签: sql-server tsql

我有以下内容:

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。为什么呢?

2 个答案:

答案 0 :(得分:4)

首先,我认为使用存储过程返回值是不错的做法,除非它们是特定的状态值。相反,请使用output参数。

但原因是因为@li_count的默认值为NULL。几乎所有与NULL的比较都会返回NULLfalse - 两者都不正确。

我认为程序应该写成:

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