我对条件有很大的选择。
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
然后它不加任何注意,并从数据库中获取所有行。我该如何实现?
答案 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)