2011-08-09 132 views
1

下面用例是代碼:在WHERE子句

CREATE PROCEDURE [dbo].[PR_CDMS_ADMIN_GET_SECURITY_INFO] ( 
DECLARE @chvMajorCatgry varchar(50) 
DECLARE @chvMinorCatgry varchar(50) 

)  
AS   

if (@chvMajorCatgry = 'yyy') 
    begin 
     select caf.ACTN_FACT_SID    
     from CDMS_ACTN_FACT caf  
     where caf.ACTN_SID in (select ACTN_SID from CDMS_ACTN where ACTN_CATGRY_CD = 'yyy') 
     print @chvMajorCatgry 
    end 
    print @chvMajorCatgry 
else if (@chvMajorCatgry = 'zzz') 
    begin 
     select caf.ACTN_FACT_SID   
     from CDMS_ACTN_FACT caf  
     where caf.ACTN_SID = (select ACTN_SID from CDMS_ACTN where ACTN_CATGRY_CD = 'zzz' and ACTN_CD = @chvMinorCatgry)   
    end 

如何處理這有一個SELECT語句?

+0

能否再詳細說明一下? – 2011-08-09 23:33:18

+0

我不希望任何其他檢查..我想有一個單一的語句與案件在哪裏條款...在實時代碼,我有大約30 if else語句與2種類型的where子句多樣化..代碼示例我有這裏使用的只是這兩種類型。 – satyajit

回答

2

Bleh,這是粗糙的。試試這個:

select caf.ACTN_FACT_SID   
    from CDMS_ACTN_FACT caf  
    where caf.ACTN_SID IN (
       select ACTN_SID 
       from CDMS_ACTN 
       where ( 
         @chvMinorCatgry = 'zzz' 
         AND ACTN_CATGRY_CD = 'Attribute' 
         AND ACTN_CD = @chvMinorCatgry) 
        ) 
       OR (
         @chvMinorCatgry = 'yyy' 
         AND ACTN_CATGRY_CD = 'Account' 
        ) 
      ) 
0

請在下面找到我的建議。您可能需要在子查詢中的case語句末尾更改通配符,具體取決於ACTN_CD列的數據類型。

CREATE PROCEDURE [dbo].[PR_CDMS_ADMIN_GET_SECURITY_INFO] ( 
    @chvMajorCatgry varchar(50), 
@chvMinorCatgry varchar(50) 
--SET @chvMajorCatgry = 'Account' 
)  
AS  

select caf.ACTN_FACT_SID    
from CDMS_ACTN_FACT caf  
where caf.ACTN_SID in (
         select ACTN_SID 
         from CDMS_ACTN 
         where ACTN_CATGRY_CD = @chvMajorCatgry 
         and ACTN_CD like case @chvmajorcatgry when 'Attribute' then @chvMinorCatgry else '%' end)