2014-02-18 67 views
0

我的查询看起来象下面这样:SQL Server错误 - 不正确的语法附近,如果条件

declare @test varchar(500) 
SELECT @test=coalesce(@test+',','') + cast(RoleName as varchar) FROM                
     ( select roles.RoleName from LU_BCOMS_usersroles usrroles 
      inner join LU_BCOMS_roles roles 
      on roles.roleid  = usrroles.Roles_roleid 
      where Users_Userid='MV10310' 
     ) as Tbl 

select repfamily.ProductName as Category,repfamily.Family as SeqChange,repfamily.RepFamily as DescOfChange, req.*, 
TaskCompVer = 
CASE WHEN req.UpdateByASPM is not null THEN 'Provide PLQM Wish List' 
     WHEN req.UpdateByASPM is null THEN 'Provide ASPM Wish List' 
     WHEN req.CreatedBy is not null THEN 'Provide ASPM Wish List' 
     END 
    from performa.TX_BCOMS_Request as req 
inner join TX_BCOMS_Requestrepfamily family on 
family.request_requestid=req.requestid 
inner join LU_BCOMS_RepFamily as repfamily on 
family.RepFamily_repFamilyid=repfamily.repfamilyid 

where req.UpdatedByPLQM is null 
(
    if (CHARINDEX('ASPM',@test)> 0) 
     Begin 
     and req.UpdatedByASPM is null 
     end 
    else if (CHARINDEX('PLQM' ,@test)> 0) 
     begin 
     and req.UpdatedByASPM IS NOT null 
     END 
) 

我不能够建立查询它说如果附近的语法不正确任何一个可以帮助我从这个..

,如果我遇到这种情况,如果(CHARINDEX(“ASPM”,@测试)> 0),我需要在“和req.UpdatedByASPM为空”,否则下一个加...

回答

1

我想你期待这个,,,

declare @test varchar(500) 
SELECT @test=coalesce(@test+',','') + cast(RoleName as varchar) FROM                
     ( select roles.RoleName from LU_BCOMS_usersroles usrroles 
      inner join LU_BCOMS_roles roles 
      on roles.roleid  = usrroles.Roles_roleid 
      where Users_Userid='MV10310' 
     ) as Tbl 

select repfamily.ProductName as Category,repfamily.Family as SeqChange,repfamily.RepFamily as DescOfChange, req.*, 
TaskCompVer = 
CASE WHEN req.UpdateByASPM is not null THEN 'Provide PLQM Wish List' 
     WHEN req.UpdateByASPM is null THEN 'Provide ASPM Wish List' 
     WHEN req.CreatedBy is not null THEN 'Provide ASPM Wish List' 
     END 
    from performa.TX_BCOMS_Request as req 
inner join TX_BCOMS_Requestrepfamily family on 
family.request_requestid=req.requestid 
inner join LU_BCOMS_RepFamily as repfamily on 
family.RepFamily_repFamilyid=repfamily.repfamilyid 

where req.UpdatedByPLQM is null and (

    ((CHARINDEX('ASPM',@test)> 0) and req.UpdatedByASPM is null) 
    or 
    ((CHARINDEX('PLQM' ,@test)> 0) and req.UpdatedByASPM IS NOT null) 
    ) 
+0

ü可以添加SQlFiddle请。 – sureshhh

0

试试这个WHERE子句地区

WHERE req.UpdatedByPLQM Is Null 
     And 
     (CASE 
      WHEN CHARINDEX('ASPM',@test)> 0 and req.UpdatedByASPM Is Null THEN 1 
      WHEN (CHARINDEX('PLQM' ,@test)> 0) and req.UpdatedByASPM Is Not Null THEN 1 
      ELSE 0 
     END) = 1 
相关问题