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('(/p arams/sear chtype)[1] ', 'varchar(50)')
-- CASE @ParamSearchType
-- WHEN 'name' THEN
-- SET @ParamValue = @SearchCriteria.value('(/p arams/emai l)[1]', 'varchar(100)')
-- SET @SQLStr = @SQLStr + ' WHERE LastName = ''' + @ParamValue + ''''
.........
.........
My xml looks like this:
<params>
<searchtype>name</searchty pe>
<firstname>Bob</firstname>
<lastname>Smith</lastname>
</params>
OR
<params>
<searchtype>memberaccounti d</searcht ype>
<memberaccountid>100010</m emberaccou ntid>
</params>
instead of technique with IF statements (btw it works fine the way I need):
Thank you in advance.
Is there way to do something like:
-- SET @ParamSearchType = @SearchCriteria.value('(/p
-- CASE @ParamSearchType
-- WHEN 'name' THEN
-- SET @ParamValue = @SearchCriteria.value('(/p
-- SET @SQLStr = @SQLStr + ' WHERE LastName = ''' + @ParamValue + ''''
.........
.........
My xml looks like this:
<params>
<searchtype>name</searchty
<firstname>Bob</firstname>
<lastname>Smith</lastname>
</params>
OR
<params>
<searchtype>memberaccounti
<memberaccountid>100010</m
</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>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER