如果添加到 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)
我有很大的 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)