Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
案例中,SQL Server_Sql_Sql Server_Case_Where - Fatal编程技术网

案例中,SQL Server

案例中,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,但我不知道如何在相同的情况下使用>和= 有什么建议吗?(其他

我正在做一些搜索,用户在下拉列表中选择一些子句。当它们将某个框留空时,我希望查询忽略子句。我知道这种情况,我想到的最好的办法是,若我将0传递给存储过程中的参数,它将忽略该参数,如下所示

WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE (something else) END)
所以,(其他东西)应该像无条件一样,它可以是'>0',因为国家ID来自所有>1,但我不知道如何在相同的情况下使用>和=

有什么建议吗?

(其他东西)
应该是
a.Country

如果
Country
为空,则将
(其他内容)
be
a.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注入。

假设
国家/地区
不可为空。