2010-05-10 77 views
1

條件我是新手SQL,我使用MSSQL2005其中取決於參數

我喜歡做的選擇能夠根據輸入參數

我已經試過這情況。

WHERE CF.PROCESS_DATE = '2010-05-05' AND 
CASE @CATEGORY_LEVEL 
    WHEN 'L' THEN CAS.MCATEGORY_ID = '' AND CAS.SCATEGORY_ID = '' 
    WHEN 'M' THEN CAS.SCATEGORY_ID = '' 
END 

但沒有工作,併發生了錯誤。

SQL很難新手程序員.. TT

回答

1

你可以重寫條件爲:

WHERE CF.PROCESS_DATE = '2010-05-05' AND 
     (
      (@CATEGORY_LEVEL = 'L' AND CAS.MCATEGORY_ID = '' AND CAS.SCATEGORY_ID = '') OR 
      (@CATEGORY_LEVEL = 'M' AND CAS.SCATEGORY_ID = '') 
     ) 
1
WHERE CF.PROCESS_DATE = '2010-05-05' AND 
    (

    (@CATEGORY_LEVEL = 'L' AND CAS.MCATEGORY_ID = '' AND CAS.SCATEGORY_ID = '') 

    OR 

    (@CATEGORY_LEVEL = 'M' AND CAS.SCATEGORY_ID = '') 

    ) 

(聯合國)幸運的是,你的代碼工作的其他數據庫(例如Postgres的,MySQL的),SQL Server沒有對布爾類型的第一類支持,所以您在THEN之後的表達式不會導致布爾類型,因此在Sql Server中不起作用