SQL位字段过滤

时间:2011-02-27 10:59:33

标签: sql-server stored-procedures filter bit

这里只是一个简单的问题。

假设我有一个用于从表格中选择记录的存储过程。

select * from tbl_table
where deleted = @deleted

所以对于上面这个,我必须传入一个参数为TRUE或FALSE。

是否可以返回删除等于TRUE和FALSE的结果,但保留传入参数的选项。所以我想,如果没有传入参数,就没有过滤器。

我想的另一种方法就是这样做..

select * from tbl_table
where deleted = @deleted1
and deleted = @deleted2

所以你有两个参数用于同一个过滤器。这样你可以做真或假,或者设置两个过滤器相同 - 给予更多的余地。

如果有人对此有任何想法或想法会很棒!

1 个答案:

答案 0 :(得分:2)

将参数设置为nullable(= NULL)然后

select * from tbl_table 
where (@deleted IS NULL) OR (deleted = @deleted)

当您不希望应用该参数的过滤器时,请不要提供参数(或显式提供为NULL)。

(但请注意,这有时会产生参数嗅探后果,特别是对于大量参数)