繁体   English   中英

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

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

我对条件有很大的选择。

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

那么它便不会对此条件造成任何损失,并从数据库中获取所有行。 我该如何实现?

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

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

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

如果要返回@param1参数为null的所有行,请使用...

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM