Sql Server如果参数为null,则忽略对字段的搜索

时间:2016-03-05 10:07:24

标签: sql sql-server sql-server-2008

我正在创建存储过程
spRegularSearch 有参数

$.get("/api/permission/something", function(result){ // <-- Check whether the user has or has not the permission to access that component
    if(result === "permission granted"){ // <-- this would be the check whether its ok or not to access that component - but this value can be changed manually if someone really wants to (debugger via inspector etc)
        // permission ok
    }
});

如果所有参数都不为空,我的代码是

@sex varchar(1),  
@maritalStatus varchar(20) = null,  
@minage int  = null,  
@maxage int = null,  
@state varchar(50) = null,  
@city varchar(50) = null  

我想删除基于字段的搜索,即 忽略[fieldname] = @parameter 如果@parameter为空
当然,我可以使用许多if else条件来实现这一点但是有没有简单的方法呢?

2 个答案:

答案 0 :(得分:2)

这是一个常见且重复的问题。您可以在下面使用: 在所有条件中添加“OR @parameter为空”

var gameclockTimer = NSTimer()

答案 1 :(得分:1)

实现此目的的一种简单方法是向WHERE子句添加查找条件,如果true值为@parameter,则WHERE CASE WHEN @parameter IS NOT NULL THEN column = @parameter ELSE true END 子句将评估为@parameter,从而对输出没有影响空。

function fncDate($date){
    $d = DateTime::createFromFormat('DD-M-YY', $date);
    $result = $d && $d->format('DD-M-YY') == $date;
    if(!$result){
        return "Date should be in the following format: DD-MMM-YYYY"; 
    }
}

我实际上不推荐这种方法,因为优化器在计划时间时不知道fncDate("17-JAN-1985");是否将是空值。更好的方法是根据您的参数动态构建查询,如果相关(参数不为空),则将条件附加到WHERE子句。

后期方法肯定会提高执行效率。