2017-01-31 5 views
2
usp_demo_sp '2016-04-01',@EmpIDs 
    usp_demo_sp '2016-04-01','111,222,333' 

Query: 
     select * from tbl_bill a, temp b 
     where a.emplid=b.emplid 
     and a.emplid in (select * from dbo.SplitString(REPLACE(replace(@EmpIDs,CHAR(13)+CHAR(10),''),CHAR(9),''), ',')) 

В приведенной выше хранимой процедуре я использую вышеуказанный запрос. Параметр @empids - значения, разделенные запятой. Этот запрос работает нормально для одиночных или нескольких empids. Но мне нужно реализовать состояние таким образом, что, когда @EmpIDs равно нулю или «», то мне нужно, чтобы удалить ниже условияКак сделать условие AND в SQL необязательным

and a.emplid in (select * from dbo.SplitString(REPLACE(replace(@EmpIDs,CHAR(13)+CHAR(10),''),CHAR(9),''), ',')) 

из приведенного выше запроса. Просьба предложить способ.

ответ

2

Попробуйте это:

select * 
from tbl_bill a 
join temp b 
    on a.emplid=b.emplid 
where ltrim(rtrim(isnull(@EmpIDs, ''))) = '' 
OR a.emplid in (
    select * 
    from dbo.SplitString(REPLACE(replace(@EmpIDs,CHAR(13)+CHAR(10),''),CHAR(9),''), ',') 
) 

Обратите внимание, что я изменил ваш неявный присоединиться к явным присоединиться.

+0

Да..Перфект .. Он работает нормально. Спасибо за помощь. – Shardul

+0

Но из-за условия ИЛИ у меня больше времени на выполнение, я думаю. – Shardul

0
select * 
from tbl_bill a, 
    inner join temp b on a.emplid = b.emplid 
where (a.emplid is null 
     or 
     a.emplid = '' 
     or 
     a.emplid in (select * 
        from dbo.SplitString(REPLACE(replace(@EmpIDs,CHAR(13)+CHAR(10),''),CHAR(9),''), ',')) 
     ) 
+0

Его не работает для нулевого состояния – Shardul

 Смежные вопросы

  • Нет связанных вопросов^_^