el *_*nho 19 sql sql-server case where
我正在做一些搜索,用户在下拉菜单中选择一些条款.当他们将一些框留空时,我想查询忽略子句.我知道CASE,我最好的想法是,如果我将0传递给存储过程中的参数,它会忽略该参数,就像这样.
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE (something else) END)
Run Code Online (Sandbox Code Playgroud)
所以,(别的东西)应该没有条件,它可以是'> 0',因为国家ID来自所有> 1,但我不知道如何在同一个CASE中使用>和=.
有什么建议?
Ada*_*Dev 29
几种方式:
-- 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
Run Code Online (Sandbox Code Playgroud)
或者,使用动态生成的语句,并仅在适当时添加Country条件.这应该是最有效的,因为您只执行具有实际需要应用的条件的查询,并且如果支持索引到位,则可以产生更好的执行计划.您需要使用参数化SQL来防止SQL注入.
您可以简化为:
WHERE a.Country = COALESCE(NULLIF(@Country,0), a.Country);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102374 次 |
| 最近记录: |