我有以下存储过程代码:
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
为真,那么我必须退回所有已雇佣和休息但未取消...依此类推。
最简单的方法是什么?
答案 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)