Случай MS SQL в проверке предложения Claus против NULL или аргумента - PullRequest
0 голосов
/ 28 января 2019

У меня есть запрос к UDF, где я хочу разрешить пользователю передавать либо ALL, либо определенный EType.

Если они передают ALL, я хочу принять все ETypes, где он не равен NULL.

Я искал в SO примеры и, кажется, не соответствую моей конкретной ситуации.

Куда я иду?

Declare
  @company varchar(4),
  @charge_cov bit,
  @EType varchar(8);

  set @company = '123'
  set @charge_cov =1
  set @EType = 'ALL'


  select e.emp_id, 
    dbo.format_emp_number(pd.EN) as EN, 
    dbo.format_emp_number(pd.MEN) as MEN,
    pd.EType
  from dbo.employee_payroll_data(NULL) pd   
    inner join employee e on (e.emp_id=pd.emp_id)
  where  pd.EType = case when @EType='ALL' then pd.EType 
                           else @EType  ) END
  and pd.EType is not null
  and e.emp_number is not null
  and e.charge_cov = 1
  and lc.pr_co_code = @company

1 Ответ

0 голосов
/ 31 января 2019

Попробуйте код ниже:

WHERE (((1 = (CASE WHEN @EType = 'ALL' THEN 1 ELSE 0 END)))
OR ((pd.Etype = (CASE WHEN @EType <> 'ALL' THEN @EType ELSE '' END))))
AND pd.Etype IS NOT NULL
...