`=` 附近的语法不正确 - SQL 表达式

Incorrect Syntax Near `=` - SQL Expression

我正在尝试在 WHERE statement.But 中包含条件检查,但我一直在 = 3

处收到无效表达式
WHERE APCCL.data = @coolval
          AND CCMF.Status_ID = 1
          AND APCCL.Status_ID = 1
          AND CLM.myval = 3
          AND 
          CASE APEL.numval
          WHEN 1 THEN  CLM.value =  3 END

基本上我想在 APEL.numval=1

时检查 CLM.VALUE=3

你不能有那样的 CASE 表达式。

应该是

WHERE APCCL.data = @coolval
      AND CCMF.Status_ID = 1
      AND APCCL.Status_ID = 1
      AND CLM.myval = 3
      AND clm.value =
      CASE APEL.numval
      WHEN 1 THEN 3 END

如果你的意思是逻辑蕴涵APEL.numval=1 -> CLM.VALUE=3那么

..
AND (APEL.numval <> 1 OR CLM.VALUE = 3) 

CASE WHEN 表达式 returns null 如果不满足条件(除非用 ELSE 指定)所以在你的情况下不满足条件查询可能变为:

WHERE APCCL.data = @coolval
          AND CCMF.Status_ID = 1
          AND APCCL.Status_ID = 1
          AND CLM.myval = 3
          AND NULL --when condition not net

这会导致语法错误,因此您不能在 CASE WHEN 语句中使用整个比较。您可以 return 列或 hard-coded 数据。

我会考虑逻辑绕过或其他 library/framework 支持动态查询处理或使用 pl/sql 来处理 if/else 案例。

这并不理想,但如果您在 CLM.value = 3 中比较的 3 是常量,则您的查询可以更改为:

WHERE APCCL.data = @coolval
          AND CCMF.Status_ID = 1
          AND APCCL.Status_ID = 1
          AND CLM.myval = 3
          AND (CASE APEL.numval
               WHEN 1 THEN CLM.value
                      ELSE 3
               END) = 3

这将导致以下结果:

  1. 条件满足时:比较CLM.VALUE = 3
  2. 不满足条件时:比较3 = 3(无意义的真语句)