Using CASE in WHERE Statement when parameter has multiple values

后端 未结 3 1978
北海茫月
北海茫月 2021-01-24 00:07

I have a problem which I think relates to having a multiple value parameter.

In my TblActivity there are two fields TblActivity.ActivityServActId

相关标签:
3条回答
  • 2021-01-24 00:49

    So after a lot of messing around I put together a simple workaround for this by dropping my use of CASE altogether - but I have a suspicion that this is not a terribly efficient way of doing things.

    WHERE
    (@YESNOActivity = 'No' OR (@YESNOActivity = 'Yes' AND
    TblActivity.ActivityServActId IN (@ServiceActivity)))
    
    AND
    
    (@YESNOContract = 'No' OR (@YESNOContract = 'Yes' AND
    TblActivity.ActivityContractId IN (@Contract)))
    
    0 讨论(0)
  • 2021-01-24 01:02

    If your @ServiceActivity is something like 1,2,3

    You can do something like this

    WHERE  `,1,2,3,` LIKE `%,1,%` 
    

    So you format your variables

    WHERE  ',' + @ServiceActivity + ',' LIKE '%,' + ID + ',%'
    

    SQL FIDDLE DEMO

    SELECT *
    FROM 
        (SELECT '1,2,3,4' as X UNION ALL
         SELECT '2,3,4,5' as X UNION ALL
         SELECT '3,4,5,6' as X UNION ALL
         SELECT '1,3,4,5' as X 
         ) as T
    WHERE ',' + X + ','  LIKE  '%,1,%'
    

    For Your Case

    (CASE WHEN @YESNOActivity = 'Yes' 
               THEN ',' + @ServiceActivity + ','
               ELSE NULL 
     END)
    LIKE
    (CASE WHEN @YESNOActivity = 'Yes' 
               THEN '%,' + TblActivity.ActivityServActId + ',%'
               ELSE 0 
     END) 
    
    0 讨论(0)
  • 2021-01-24 01:03

    In SQL, the IN clause does not support parameters the way you are using them. The general syntax is

    IN (1, 2, 3, 4)
    

    you have

    IN (@Param)
    

    where something like @Param = '1, 2, 3, 4'

    Internally, SQL will turn this into

    IN ('1, 2, 3, 4')
    

    Note the quotes... you are now matching against a string!

    There are a number of ways to address this. Search SO for "sql in clause parameter", pick one that works for you, and upvote it.


    (Added)

    Parameterize an SQL IN clause seems pretty definitive on the subject. While long ago I upvoted the third reply (the one with table-value parameters), any of the high-vote answers could do the trick. The ideal answer depends on the overall problem you are working with. (I am not familiar with SSRS, and can't give more specific advice.)

    0 讨论(0)
提交回复
热议问题