1

我在表中有位类型的列“状态”,在参数声明中我将其默认为 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的情况下。

4

1 回答 1

1

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

@Status bit = null

您可以通过这样做来合理化您的过滤器

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

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

于 2013-10-18T13:22:18.480 回答