【问题标题】:MSSQL : Incorrect syntax near '!'MSSQL:“!”附近的语法不正确
【发布时间】:2021-09-26 11:19:39
【问题描述】:
SELECT COUNT(*) AS numrows
FROM "tbltasks"
WHERE "status" = 1
  AND CASE WHEN rel_type='project'
        AND rel_id IN (SELECT project_id
                      FROM tblproject_settings
                      WHERE project_id = rel_id
                       AND "name" = 'hide_tasks_on_main_tasks_table'
                       AND value=1)
       THEN rel_type != 'project'
       ELSE 1 = 1 END

我正在处理现有项目,我正在将查询从 MySQL 转换为 MsSQL,当我执行此查询时它给出:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '!'.

我在这个查询中卡了整整一周,找不到问题出在哪里,我真的不知道该怎么办。

【问题讨论】:

  • 我相信 ISO 标准 SQL 不等于运算符是 <> 而不是 !=
  • 空白是免费的,你知道的

标签: sql sql-server-2008


【解决方案1】:

首先,修复可能不需要的引用。其次,问题可能是CASE/THEN 中的布尔表达式。您可以改为使用:

SELECT COUNT(*) AS numrows
FROM tbltasks
WHERE status = 1 AND
      (CASE WHEN rel_type = 'project' AND
                 rel_id IN (SELECT project_id
                            FROM tblproject_settings
                            WHERE project_id = rel_id AND
                                  name = 'hide_tasks_on_main_tasks_table' AND
                                  value = 1
                           )
            THEN 0 ELSE 1
       END) = 1

我不喜欢在WHERE 子句中使用CASE 表达式,所以我建议重写该代码。但是,为了两个数据库中的查询之间的一致性,我会等到所有代码都工作之后再做这样的改进。

【讨论】:

  • 先生,非常感谢,我刚刚执行了它,它成功了,非常感谢,你是一个救生员,上帝保佑你先生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
  • 2018-08-14
  • 2011-03-11
相关资源
最近更新 更多