где условие в зависимости от параметра - PullRequest
1 голос
/ 10 мая 2010

Я новичок в 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 для начинающего программиста сложно .. T.T

Ответы [ 2 ]

1 голос
/ 10 мая 2010
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 = '')

    )

(Un) к счастью, ваш код работает с другой базой данных (например, Postgres, MySQL), SQL Server не имеет поддержки первого класса для логического типа, поэтому ваше выражение после THEN не приведет к логическому типу, следовательно, не будет работа в Sql Server

1 голос
/ 10 мая 2010

Вы можете переписать условие как:

 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 = '')
       )
...