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

mssql syntax error near the keyword 'in'

当我在 sql 服务器中执行以下查询时,出现以下错误

Incorrect syntax near the keyword 'in'

查询:

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

这应该很简单:

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

看不到将 IIF 函数放在 where 子句中的任何意义。

 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,其余的没有任何意义。

等价逻辑为:

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

然而,这有点矫枉过正,因为第一个表达式只涉及常量并且总是为真。更常见的是,你会得到类似这样的东西:

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

此外,如果您正在学习 SQL——而不是使用 MS Access——学习 CASE 语句,而不是 IIF()CASE 是标准 SQL 并且基本上在所有数据库中都可用。

这会起作用。

说明:不能在CASE语句的THEN部分使用IN运算符,所以要使用嵌套的CASE语句。现在,这个查询不会给你任何记录,因为“1 != 1”总是 returns false 并且 THEN 部分不会执行。

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 关键字附近没有语法错误。您可以根据需要修改此查询。