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

SQL Server跨表匹配校验后更新Daily_Proc表状态方法

问题背景

需要实现3条SQL处理规则:

  • 从Daily_Proc表读取满足CreatedDate = 06/06/2022 AND Status = Processed条件的记录
  • 通过MID和Source字段联合校验,判断记录是否存在于Lit_Hold_Err表中
  • 若匹配存在,将Daily_Proc表对应记录的Status字段值从Processed更新为Error-Retry

原有已写的SELECT查询存在两个问题:

  1. 日期条件写为CreatedDate > '06/06/2022 0:00:00',会漏掉06/06/2022 0点整生成的记录,且如果字段带时分秒,直接用等值判断会漏判当天其他时间的记录
  2. 分开用IN判断MID和Source是否存在于Lit_Hold_Err表,会出现字段错配:只要MID在表中出现过、Source也在表中出现过就会被判定为匹配,不需要两个字段属于同一条Lit_Hold_Err记录,不符合联合匹配的要求。
正确实现SQL

更新语句

采用EXISTS做两表联合匹配,逻辑严谨且性能优于多表关联/IN写法:

UPDATE Daily_Proc
SET Status = 'Error-Retry'
WHERE 
    -- 日期区间判断,覆盖06/06/2022全天所有时间点的记录
    CreatedDate >= '2022-06-06 00:00:00'
    AND CreatedDate < '2022-06-07 00:00:00'
    AND Status = 'Processed'
    -- MID+Source联合匹配Lit_Hold_Err表
    AND EXISTS (
        SELECT 1
        FROM Lit_Hold_Err err
        WHERE err.MID = Daily_Proc.MID
          AND err.Source = Daily_Proc.Source
    )

提示:执行更新前建议先预览待更新的数据,避免误操作,预览只需将UPDATE Daily_Proc SET Status = 'Error-Retry'替换为SELECT * FROM Daily_Proc即可。

按照给出的测试样例数据,执行上述语句后,仅会更新MID为KEKELO、Source为KEKELO@gmail.com的记录,其余记录不受影响,符合预期。

测试表样例数据

Daily_Proc表

HoldMIDSourceCreateDateStatus
JEJELEEKJELEEK@gmail.com06/03/2022New
KEKEKELOKEKELO@gmail.com06/06/2022Processed
ZEZEKEKEZEKEKE@gmail.com06/06/2022Processed

Lit_Hold_Err表

HoldMIDSourceErrorMessage
KEKEKELOKEKELO@gmail.com"Not Found

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:57:25