You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含JOIN的SQL UPDATE语句CASE WHEN语法错误及修正咨询

修正SQL条件更新语句的语法错误并实现需求

错误原因分析

你的修改后语句出现语法错误,根源在两处:

  • CASE 语句未用 END 关键字闭合,SQL要求必须遵循CASE ... WHEN ... THEN ... ELSE ... END的完整结构
  • ELSE 分支里的 DATEADD 函数括号不完整,GETDATE() 后面遗漏了一个闭合括号

修正后的完整代码

UPDATE [SomeSchema].[Synchronization]
SET [NextSynchronizationMoment] = CASE
        WHEN DATEDIFF(s, GETDATE(), s.[NextSynchronizationMoment]) < t.Interval 
        THEN DATEADD(s, t.Interval, s.[NextSynchronizationMoment]) -- 常规同步:以上次同步时间加间隔计算下次时间
        ELSE DATEADD(s, t.Interval, GETDATE()) -- 补漏同步:以当前时间加间隔,跳过已错过的同步节点
    END
FROM [SomeSchema].[Synchronization] s
INNER JOIN #syncs ON #syncs.SynchronizationApiSubscriptionId = s.SynchronizationApiSubscriptionId
INNER JOIN [SomeSchema].[SynchronizationTier] t ON s.SynchronizationTierId = t.SynchronizationTierId 

逻辑优化补充

原条件 DATEDIFF(s, GETDATE(), s.[NextSynchronizationMoment]) < t.Interval 的逻辑等价于原计算的下次同步时间(上次时间+间隔)晚于当前时间,如果想让条件更直观,可改写为:

WHEN DATEADD(s, t.Interval, s.[NextSynchronizationMoment]) > GETDATE()

两种写法效果完全一致,可根据可读性选择。

内容的提问来源于stack exchange,提问作者Zenith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:22:44