Case 不接受 Begin
我需要在一个案例中更新 2 个单独的字段,如下所示
UPDATE PYR SET
MSR =
Case
When MSR = :WRKH then
Begin
MSR = NULL
WRKDAY = WRKDAY -1
end;
end;
CASE
就像 PSQL(Firebird 的过程语言)中的 IF
,但事实并非如此。这也不是 UPDATE
语法的工作方式。 CASE
是一个条件value表达式,它只能返回一个值。
正确的更新语句是将条件放在 WHERE 子句中(正如 Iłya Bursov 在评论中所建议的那样):
update PYR set MSR = NULL, WRKDAY = WRKDAY -1
where MSR = :WRKH
如果这是还更新其他字段的更复杂语句的一部分,则需要为每个字段编写条件:
update PYR set
MSR = case when MSR = :WRKH then null else MSR end,
WRKDAY = case when MSR = :WRKH then WRKDAY - 1 else WRKDAY end
NULLIF
简化)
update PYR set
MSR = nullif(MSR, :WRKH),
WRKDAY = case when MSR = :WRKH then WRKDAY - 1 else WRKDAY end