我在表格中有位类型的“状态”列,并且在参数声明中我将其默认为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的情况下。
答案 0 :(得分:1)
您可以将@status
参数的默认值设置为null
,与其他参数一样。
@Status bit = null
您可以通过执行此操作来合理化过滤器
where
isnull(@firstname, Firstname) = FirstName
and
isnull(@LastName, LastName) = LastName
and
isnull(@Status, Status) = Status
这个和原始查询都不会返回数据库中的值为空的行。