代码之家  ›  专栏  ›  技术社区  ›  David

如果添加到where子句的参数为null,则从db获取所有行

  •  0
  • David  · 技术社区  · 7 年前

    WHERE ADB.param1=@param
    

    在我发送param变量的地方

            SqlParameter param1Param = cmd.Parameters.AddWithValue("@param1", param1);
            if (param1== null)
            {
                param1Param.Value = DBNull.Value;
            }
    

    当查询执行时,它总是检查 ADB.param1=param 当我发送DBNull.Value时,它从数据库中什么也得不到。 但我不想那样

    如果param==null

    然后它不附加这个条件,从数据库中获取所有行。我怎样才能做到?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Tim Biegeleisen    7 年前

    这里有一个技巧甚至不需要改变你的C代码:

    WHERE ADB.param1 = COALESCE(@param, ADB.param1)
    

    对于非SQL NULL 价值观 @param 必须等于 ADB.param1 WHERE 子句将始终为true,并将返回所有记录。

        2
  •  1
  •   freefaller    7 年前

    如果你想回来 全部的 @param1

    where (@param1 is null or ADB.param1 = @param1)
    

    如果只想返回列值 param 为空使用。。。

    where ((@param1 is null and ADB.param1 is null) or ADB.param1 = @param1)
    
        3
  •  0
  •   Josu A.    7 年前

    我想你的问题是 WHERE ADB.param1=@param1

    尝试 WHERE (ADB.param1=@param1 OR @param1 IS NULL)