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

get all rows from db if parameter added to where clause is null

我有很大的 select where 条件。

WHERE ADB.param1=@param

在我发送参数变量的地方

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

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

if param== null

然后它不理会这种情况并从数据库中获取所有行。我怎样才能做到这一点?

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

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

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

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

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

如果您想要 return 所有 @param1 参数为空,请使用...

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

如果您只想 return 那些 param 的列值为空的行,请使用...

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