sql - 如何从 NULL 列中获取值?

标签 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 参数传递给过程,则返回的结果将不会被该参数过滤,因此如果所有参数都为空,则返回该表中的所有内容。

上面的内容仅适用于不为空的列值,当将空值传递给所有参数然后不返回任何内容时,实际的存储过程有更多参数,因此我无法找到重写表达式以匹配每个参数的解决方案组合。

最佳答案

我相信你想要的逻辑是:

WHERE (TITLE = @title OR @title IS NULL) AND
      (INITIALS = @initials OR @initials IS NULL) AND
      (SURNAME = @surname OR @surname IS NULL)

关于sql - 如何从 NULL 列中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53885607/

相关文章:

sql - 帮助在 SQL/NoSQL 混合(Sql 服务器/RavenDB)中对 EAV 进行建模

sql-server - DMF sys.dm_exec_sql_text 不显示 DBID

sql - 我什么时候应该在 postgresql 中使用 fetch 关键字

sql - SQL 查询中的 distinct 问题

sql - 在插入新数据集之前获取表中已有事件的行数?

具有 "bad"日期条件的 Sql Server SELECT 语句

mysql - SQL 分组依据 : Get values of 'max' record

sql-server - 哪个面向文档的数据库比 SQL Server 具有更好的报告性能

stored-procedures - 访问存储过程输出参数时出现间歇性空引用错误

c# - 使用 CLR 和 GZIP 压缩行集