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

时间:2018-10-11 09:06:32

标签: c# sql if-statement null where

我对条件有很大的选择。

WHERE ADB.param1=@param

在我将参数变量发送到的地方

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

此代码按以下方式工作。 查询执行时,它总是检查ADB.param1=param条件,当我发送DBNull.Value时,它从数据库中什么也没有得到。 但是我想要的不是

  

如果param == null

然后它不加任何注意,并从数据库中获取所有行。我该如何实现?

3 个答案:

答案 0 :(得分:1)

这是一个技巧,它甚至不需要更改C#代码:

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

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

答案 1 :(得分:1)

如果您要返回所有行,其中@param1参数为空,请使用...

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

如果只想返回param列值为空的行,请使用...

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

答案 2 :(得分:0)

我假设您的查询是WHERE ADB.param1=@param1

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