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