Sql server 存储过程,即使在null值保存数据之后

Sql server 存储过程,即使在null值保存数据之后,sql-server,stored-procedures,optional-parameters,Sql Server,Stored Procedures,Optional Parameters,以上是我的存储过程。传递空值时,它应返回0。即使传递了1个值而未传递另一个值,也应返回0,而不是插入记录 非常感谢您的帮助。在您描述您的问题之前,我先猜猜。我想问题在于默认参数。也许您只是不传递参数或传递空字符串,所以请尝试这种方法 ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](@ROLENAME VARCHAR(100), @STATUS BIT) AS BEGIN SET NOCOUNT ON; IF(@ROLENAME IS NULL

以上是我的存储过程。传递空值时,它应返回0。即使传递了1个值而未传递另一个值,也应返回0,而不是插入记录


非常感谢您的帮助。

在您描述您的问题之前,我先猜猜。我想问题在于默认参数。也许您只是不传递参数或传递空字符串,所以请尝试这种方法

ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](@ROLENAME VARCHAR(100), @STATUS BIT)
AS
BEGIN   
    SET NOCOUNT ON;
    IF(@ROLENAME IS NULL OR @STATUS IS NULL)
    BEGIN
       RETURN 0
    END
    ELSE
    BEGIN
       IF EXISTS (SELECT [RoleName], [Status] FROM ST_Roles 
                  WHERE [RoleName] = @ROLENAME)
       BEGIN
          RETURN 0
       END
       ELSE IF(@ROLENAME IS NOT NULL)
       BEGIN
          INSERT INTO ST_Roles ([RoleName], [Status]) VALUES(@ROLENAME, @STATUS)
          RETURN 1
       END
    END
END

你能澄清你想要什么吗?现在,如果其中一个为null,它返回0,那么您希望它做什么呢?有什么问题吗?尝试为参数设置默认值。在我的计算机上,这与您描述的方式相同。也许我不明白这个问题?当任一值为null时,它返回0,如果角色名已经存在,它也返回0。当角色名为非空且状态为非空且角色名不存在时,返回1。这与您试图实现的目标有何不同?当我输入rolename empty或null时,它正在保存数据,而我希望它返回0。请尝试添加默认值和/或检查@rolename是否为空字符串。检查我的答案。现在一切正常。您能告诉我是否必须像您那样指定值吗?只有在您有可选参数的情况下。查看链接了解更多信息
 ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](
               @ROLENAME VARCHAR(100) = NULL, 
                @STATUS BIT = NULL)
        AS
        BEGIN   
            SET NOCOUNT ON;
            IF(ISNULL(@ROLENAME, '') = '' OR @STATUS IS NULL)
                BEGIN
                    RETURN 0
                END
            ELSE
                BEGIN
                    IF EXISTS (SELECT [RoleName],[Status] from ST_Roles where  [RoleName] = @ROLENAME)
                        BEGIN
                            RETURN 0
                        END
                    ELSE IF(@ROLENAME IS NOT NULL)
                        BEGIN
                            INSERT INTO ST_Roles ([RoleName],[Status]) VALUES(@ROLENAME,@STATUS)
                            RETURN 1
                        END
                END


        END