SQL where带有基于混合的过滤器选项的语句

时间:2018-04-12 00:28:07

标签: sql sql-server

我有以下存储过程代码:

DECLARE @iscanceled bit
DECLARE @ishired bit
DECLARE @inprocess bit

SELECT 
    e.name,
    e.iscanceled,
    e.ishired
    * 
FROM 
    employee e

因此,上述过滤器必须过滤数据,因此如果@iscanceled@ishired为真,那么我必须取消并雇用所有员工。

如果@iscanceled@ishired以及@inprocess为真,那么我必须退回所有已取消和雇用的员工以及其他员工。

如果@iscanceled为假且@ishired@inprocess为真,那么我必须退回所有已雇佣和休息但未取消...依此类推。

最简单的方法是什么?

2 个答案:

答案 0 :(得分:0)

将值传递给参数时,如果要将其设置为true,则需要指定1;如果false设置为0.那么如果该参数未包含在where条件中,则赋值为null。然后在你的where子句中你这样做。

WHERE ( iscanceled = @iscanceled OR @iscanceled is null) 
AND  (ishired = @ishired OR @ishired is null)

通过这种方式,无论是传递值还是将其设置为null,语句仍然是正确的。

答案 1 :(得分:0)

以下查询应该适合您的情况。

DECLARE @iscanceled bit
DECLARE @ishired bit
DECLARE @inprocess bit

 SELECT 
    e.name,
    e.iscanceled,
    e.ishired,
    * FROM employee e
WHERE (@iscanceled=1 AND @ishired=1 AND @inprocess=1) --RETURNS ALL
     OR (e.iscanceled=@iscanceled AND e.ishired =@ishire)