关键字' in'附近的mssql语法错误

时间:2015-08-17 11:59:57

标签: sql sql-server case iif

当我在sql server中执行以下查询时,我得到以下错误

  

关键字' in'附近的语法不正确

查询:

select projectid 
from projects 
where iif(1!=1,
projects.projectid in (1,16,17,18,19,20,21,22,23),
1);

3 个答案:

答案 0 :(得分:1)

等效逻辑是:

where (@TakeAllFlag = 1) or p.projectid in (1, 16, 17, 18, 19, 20, 21, 22, 23);

然而,这是过度的,因为第一个表达式只涉及常量并且始终为真。更常见的是,你会有类似的东西:

CASE

此外,如果您正在学习SQL - 而不是使用MS Access - 请学习IIF()语句,而不是CASEcopyProperty是标准SQL,基本上可用于所有数据库。

答案 1 :(得分:1)

这样可行。

说明:您不能在CASE语句的THEN部分使用IN运算符,这就是使用嵌套CASE语句的原因。现在,这个查询将不会给你任何记录,因为“1!= 1”总是返回false而那么部分将不会执行。

SELECT projectid

FROM projects

WHERE
projectid = CASE

        WHEN 1 != 1 

        THEN 

            CASE 
            WHEN projectid IN (1,16,17,18,19,20,21,22,23)
            THEN projectid
            ELSE 1 END
      END;

现在,IN关键字附近没有语法错误。您可以根据需要修改此查询。

答案 2 :(得分:0)

这应该简单如下:

select projectid 
from projects 
where projects.projectid in (1,16,17,18,19,20,21,22,23)

没有看到任何在where子句中放置IIF函数的感觉。

 iif(1!=1, projects.projectid in (1,16,17,18,19,20,21,22,23), 1)

在简单的英语中,上面的行与if 1 is not equal to 1 then use the IN expression else return 1

互操作

1总是等于1,其余的没有任何意义。