where数据类型在where条件中

时间:2013-10-18 13:18:07

标签: sql sql-server

我在表格中有位类型的“状态”列,并且在参数声明中我将其默认为0并且我没有其他参数进入默认值为null

 @FirstName varchar(20) = null,
 @LastName varchar(20) = null,
 @Status bit = 0

我的sql就像

 Select * from customers where 
 (ISNULL(@FirstName,'') =''  OR  FirstName= @FirstName)
 AND (ISNULL(@LastName,'') =''  OR  LastName= @LastName)
 AND (Status = @Status)

情况是,如果只从代码发送@FirstName值,并且表中的“Status = 1”列的值没有发送@Status的值,那么因为@Status默认为0没有记录获取回。如何处理位类型,在未发送位类型的参数且表中的值为1的情况下。

1 个答案:

答案 0 :(得分:1)

您可以将@status参数的默认值设置为null,与其他参数一样。

@Status bit = null

您可以通过执行此操作来合理化过滤器

 where
     isnull(@firstname, Firstname) = FirstName
 and
     isnull(@LastName, LastName) = LastName
 and 
     isnull(@Status, Status) = Status

这个和原始查询都不会返回数据库中的值为空的行。