矢量“where”子句的优雅方式?

时间:2012-01-15 13:16:39

标签: sql-server sql-server-2005 where-clause

表:

name |   isActive       //(bit -  not nullable)
___________________
a          1
b          1
c          0
d          0
...        ...
用户界面中的

我有:

enter image description here

用户可以选择他是否只想要Active onesNon Active onesNothing

我正在创建一个可以包含以下值之一的向量:'11,10,01,00'

  

10 =给我活跃,不要给我 - 非活跃

     

01 =给我非活跃,不要给我 - 活跃

     11,给我两个......

     

  没什么......

这是开始。

但我正在查询查询中where子句的优雅方式:

我的拍摄:

select ...
WHERE  isActive = CASE  WHEN LEFT(@vector, 1) = RIGHT(@vector, 1)
       AND RIGHT(@vector, 1) = '1' THEN isActive
         ELSE 
          ... ( more option calculations ( bad and long and non elegant ...)

           END

任何优雅的帮助?

1 个答案:

答案 0 :(得分:0)

我不明白00 - NOTHING是什么意思。实际上,这意味着您不需要执行查询 你可以试试这个:

...
WHERE isActive=@isActive OR @isActive IS NULL

当您关心isActive时,您将10传递给@isActive,否则就会传递NULL

但是此查询不会使用isActive之上的索引。