案例中,SQL Server
我正在做一些搜索,用户在下拉列表中选择一些子句。当它们将某个框留空时,我希望查询忽略子句。我知道这种情况,我想到的最好的办法是,若我将0传递给存储过程中的参数,它将忽略该参数,如下所示案例中,SQL Server,sql,sql-server,case,where,Sql,Sql Server,Case,Where,我正在做一些搜索,用户在下拉列表中选择一些子句。当它们将某个框留空时,我希望查询忽略子句。我知道这种情况,我想到的最好的办法是,若我将0传递给存储过程中的参数,它将忽略该参数,如下所示 WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE (something else) END) 所以,(其他东西)应该像无条件一样,它可以是'>0',因为国家ID来自所有>1,但我不知道如何在相同的情况下使用>和= 有什么建议吗?(其他
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE (something else) END)
所以,(其他东西)应该像无条件一样,它可以是'>0',因为国家ID来自所有>1,但我不知道如何在相同的情况下使用>和=
有什么建议吗?(其他东西)
应该是a.Country
如果Country
为空,则将(其他内容)
bea.Country或a.Country为空
.. ELSE a.Country ...
我想试试这个:
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE a.Country END)
您可以简化为:
WHERE a.Country = COALESCE(NULLIF(@Country,0), a.Country);
有几种方法:
-- Do the comparison, OR'd with a check on the @Country=0 case
WHERE (a.Country = @Country OR @Country = 0)
-- compare the Country field to itself
WHERE a.Country = CASE WHEN @Country > 0 THEN @Country ELSE a.Country END
或者,使用动态生成的语句,并仅在适当时添加国家/地区条件。这应该是最有效的,因为您只执行具有实际需要应用的条件的查询,并且如果支持索引到位,则可以产生更好的执行计划。您需要使用参数化SQL来防止SQL注入。假设
国家/地区
不可为空。