Условие, базирано на клауза where SQL Server съхранена процедура

Може ли някой да предложи как да добавя условие в клауза WHERE на моята съхранена процедура?

CREATE Procedure getAllEmployeesByDeptAndFlag
    @Dept int,
    @sal int,
    @Flag int
AS
    if @flag = 1
        select * 
        from employee 
        where Department = @dept and @sal < 10000
    else 
        select * 
        from employee 
        where Department = @dept

Има ли някакъв начин за опростяване на горната процедура?


person jestges    schedule 27.08.2015    source източник


Отговори (3)


Можете да използвате логическия оператор or, за да обедините двата клона на оператора if:

select * from employee where Department = @dept AND (@flag != 1 OR @sal < 10000)
person Mureinik    schedule 27.08.2015

Можете да определите, че ако подадете NULL за @sal, тогава заплатата не се проверява. Няма нужда от допълнителен параметър @flag...

CREATE Procedure getAllEmployeesByDeptAndFlag
    @Dept int,
    @sal int
AS
    SELECT 
        (list of columns)
    FROM 
        dbo.employee 
    WHERE 
        Department = @dept 
        AND (@sal IS NULL OR salary <= @sal)
person marc_s    schedule 27.08.2015

Просто използвайте OR:

CREATE Procedure getAllEmployeesByDeptAndFlag
@Dept int,
@sal int,
@Flag int
as
    select * 
    from employee 
    where Department = @dept 
    and (@flag <> 1 or @sal < 10000)
person Zohar Peled    schedule 27.08.2015