Link to home
Start Free TrialLog in
Avatar of shmoel
shmoel

asked on

CASE WHEN for WHERE clause instead of IF

I am trying to replace IF with CASE, but keep getting syntax error.
Is there way to do something like:
-- SET @ParamSearchType = @SearchCriteria.value('(/params/searchtype)[1]', 'varchar(50)')
-- CASE @ParamSearchType
--   WHEN 'name'  THEN
--       SET @ParamValue = @SearchCriteria.value('(/params/email)[1]', 'varchar(100)')
--       SET @SQLStr  = @SQLStr + ' WHERE LastName = ''' + @ParamValue + ''''
.........
.........

My xml looks like this:


 <params>
   <searchtype>name</searchtype>
   <firstname>Bob</firstname>
   <lastname>Smith</lastname>
 </params>  
 
                                               OR

    <params>
      <searchtype>memberaccountid</searchtype>
      <memberaccountid>100010</memberaccountid>
   </params>


instead of technique with IF statements (btw it works fine the way I need):

Thank you in advance.
@SearchCriteria   xml                  
AS
BEGIN
 
  DECLARE @SQLStr varchar(8000)
  DECLARE @ParamSearchType varchar(50)
  DECLARE @ParamValue varchar(50)
  DECLARE @ParamValueFN varchar(50)
  DECLARE @ParamValueLN varchar(50)
 
  SET @SQLStr  = 'SELECT FirstName, LastName, MemberAccountID, Email.....'
 
 SET @SQLStr  = @SQLStr + ' FROM table'
 
 --Get SearchType value from searchtype parameter
 SET @ParamSearchType = @SearchCriteria.value('(/params/searchtype)[1]', 'varchar(50)')
   
  IF @ParamSearchType = 'name' 
  BEGIN 
        SET @ParamValueLN = @SearchCriteria.value('(/params/lastname)[1]', 'varchar(50)')
        --check if first name is provided
        IF @SearchCriteria.exist('/params/firstname') = 1
        BEGIN 
           SET @ParamValueFN = @SearchCriteria.value('(/params/firstname)[1]', 'varchar(50)')
           SET @SQLStr  = @SQLStr + '  WHERE FirstName = ''' + @ParamValueFN + ''' AND LastName = ''' + @ParamValueLN + ''' '
        END
        ELSE
           SET @SQLStr  = @SQLStr + ' WHERE LastName = ''' + @ParamValueLN + ''''   
  END  
 
  IF @ParamSearchType = 'memberaccountid' 
     BEGIN
       SET @ParamValue = @SearchCriteria.value('(/params/memberaccountid)[1]', 'varchar(50)')
       SET @SQLStr  = @SQLStr + ' WHERE MemberAccountID = ''' + @ParamValue + '''' 
     END
 
  EXEC (@SQLStr)
 
 
 
My xml looks like this:
 
 
 <params>
   <searchtype>name</searchtype>
   <firstname>Bob</firstname>
   <lastname>Smith</lastname>
 </params>   
  
                                               OR
 
    <params>
      <searchtype>memberaccountid</searchtype>
      <memberaccountid>100010</memberaccountid>
   </params>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Patrick Matthews
Patrick Matthews
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of shmoel
shmoel

ASKER

Thank you for your expertise.