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

SQL Server下通过Select、Inner Join与Case When更新Claim表字段

SQL Server 多表关联更新Claim表实现方案

SQL Server支持UPDATE语句直接关联多表,不需要嵌套子查询即可实现需求,完整实现代码如下:

UPDATE c
SET c.ClaimStatusID = CASE de.DamageApprovedStatusID
        WHEN -1 THEN 0
        WHEN 0 THEN 4
        WHEN 1 THEN 2
    END
FROM Claim c
-- 关联Damage表,Claim.ID与Damage.ID取值一致
INNER JOIN Damage d ON c.ID = d.ID
-- 关联中间表
INNER JOIN DamageErrandCrossDamage decd ON d.ID = decd.DamageID
-- 关联DamageErrand表取状态字段
INNER JOIN DamageErrand de ON decd.DamageErrandID = de.DamageErrandID

注意事项

  • 执行更新前先执行下方验证语句,确认关联关系和映射结果符合预期,避免误更新数据:
SELECT 
    c.ID AS ClaimID,
    de.DamageApprovedStatusID,
    CASE de.DamageApprovedStatusID
        WHEN -1 THEN 0
        WHEN 0 THEN 4
        WHEN 1 THEN 2
    END AS TargetClaimStatusID
FROM Claim c
INNER JOIN Damage d ON c.ID = d.ID
INNER JOIN DamageErrandCrossDamage decd ON d.ID = decd.DamageID
INNER JOIN DamageErrand de ON decd.DamageErrandID = de.DamageErrandID
  • 若单条Damage记录对应多条DamageErrand记录,需要先明确取值规则(比如取最新审核状态),先对DamageErrand侧数据做去重/聚合处理后再关联,避免重复关联导致更新结果异常
  • 建议在事务中执行更新,确认结果正确后再提交,出错可回滚,事务示例如下:
BEGIN TRANSACTION

-- 放入上方的UPDATE更新语句
UPDATE c
SET c.ClaimStatusID = CASE de.DamageApprovedStatusID
        WHEN -1 THEN 0
        WHEN 0 THEN 4
        WHEN 1 THEN 2
    END
FROM Claim c
INNER JOIN Damage d ON c.ID = d.ID
INNER JOIN DamageErrandCrossDamage decd ON d.ID = decd.DamageID
INNER JOIN DamageErrand de ON decd.DamageErrandID = de.DamageErrandID

-- 验证更新结果,确认无误执行COMMIT TRANSACTION,出错执行ROLLBACK TRANSACTION
SELECT COUNT(*) FROM Claim WHERE ClaimStatusID IS NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:03:03