如何从NULL列获取值?

时间:2018-12-21 13:29:10

标签: sql sql-server sql-server-2012

如何修改此存储过程以也返回具有NULL列值的行?

    @title VARCHAR(50) NULL,
    @initials VARCHAR(100) NULL,
    @surname VARCHAR(100) NULL, 
AS
BEGIN
    SELECT 
        ID, MEMBERSHIP_ID, TITLE, INITIALS, SURNAME, 
    FROM
        MEMBERSHIP_DTLS 
    WHERE 
        TITLE = (CASE WHEN @title IS NULL THEN (TITLE) ELSE @title END)
        AND INITIALS = (CASE WHEN @initials IS NULL THEN INITIALS ELSE @initials END )
        AND SURNAME = (CASE WHEN @surname IS NULL THEN SURNAME ELSE @surname END)
END
GO

我要在这里完成的是,如果将NULL参数传递给该过程,则返回的结果将不会被该参数过滤,因此,如果所有参数均为null,则返回该表中的所有内容。 / p>

上面的方法仅适用于在向所有参数传递null却没有返回任何值的情况下不为null的列值,实际的存储过程具有更多的参数,因此我无法寻求一种解决方案来重写表达式以匹配每个参数组合。

4 个答案:

答案 0 :(得分:4)

我相信您想要的逻辑是:

System.err

答案 1 :(得分:4)

我更改了查询,以处理参数空值。请检查

SELECT M.ID, M.MEMBERSHIP_ID, M.TITLE , M.INITIALS, M.SURNAME, 
FROM MEMBERSHIP_DTLS M 
WHERE (@title IS NULL OR TITLE = @title)
  AND (@initials IS NULL or INITIALS = @initials )
  AND (@surname IS NULL OR SURNAME = @surname  );

如果@title为NULL,我不希望它返回NULL值

尝试

((@title IS NULL AND TITLE IS NOT NULL) OR TITLE = @title)

答案 2 :(得分:1)

您可以使用ISNULL作为简写。这将返回NULLS和当@title具有值时匹配@title的值,否则将返回所有记录。

AND (@title IS NULL OR TITLE=@title)

答案 3 :(得分:0)

您还可以尝试以下方法来检查和匹配带有传递变量值的列值。

下面的评论中给出了描述。

PendingIntent

输出如下所示

enter image description here