如何修改此存储过程以也返回具有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的列值,实际的存储过程具有更多的参数,因此我无法寻求一种解决方案来重写表达式以匹配每个参数组合。
答案 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)