适当的情况

时间:2014-08-19 07:13:32

标签: sql-server

else if @Mode='searchdetailsallvalues'
begin
     select * 
     from   tbl_Pgm_Preview 
     where  (Brand=@brand) and (Department=@department) 
            and (CASE 
                     WHEN (@Liststyle <> ',') THEN 
                          (Style in (Select * from dbo.[CSVToTableStyle](@Liststyle))) 
                     ELSE NULL 
                 END)
            and (CASE 
                     WHEN (@Listkdia <> ',') THEN 
                          (K_DIA in ( K_DIA in ( Select * from dbo.[CSVToTableKdia](@Listkdia)))
                     ELSE NULL 
                 END)
end

我收到以下错误

消息156,级别15,状态1,过程sp_Program,第141行

关键字&#39; in&#39;附近的语法不正确。

消息102,级别15,状态1,过程sp_Program,第141行

&#39;)附近的语法不正确

如何解决这个问题?即使我尝试使用IF条件语句....我需要在SELECT,AND子句中使用IF语句。

1 个答案:

答案 0 :(得分:0)

您的CASE表达式:

CASE 
      WHEN (@Liststyle <> ',') THEN 
           (Style in (Select * from dbo.[CSVToTableStyle](@Liststyle))) 
      ELSE NULL 
END

评估条件@Liststyle <> ',',但它返回条件Style in (Select * from dbo.[CSVToTableStyle](@Liststyle)),而不是CASE operator must return a result expression,例如,SUM(MyNumbersColumn)'MyString'或{{ 1}}。

结果表达式是在执行控制流期间由SQL引擎评估的内容,它必须始终返回值,而不是条件。

正如@Damien_The_Unbeliever指出的那样,您应该在1+1子句中使用ANDOR条件而不是CASE