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

如何仅对存在header键的JSON数据执行SQL修改操作?

解决方案

要实现只处理含header键的对象(重命名键为test并设空值),同时保留已有test键的对象数据,你需要在解析JSON时同时识别header和test字段,再通过条件判断区分处理:

UPDATE Files
SET Columns = (
    SELECT 
        test = CASE WHEN j.header IS NOT NULL THEN '' ELSE j.test END,
        j.value
    FROM OPENJSON(Columns)
    WITH (
        header varchar(50), -- 解析原header字段
        test varchar(50),   -- 同时解析已存在的test字段
        value varchar(50)
    ) j
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER -- 保持原数组结构
);

关键说明:

  • WITH子句同时声明header和test字段,确保不管JSON对象里是哪种键,都能被正确读取
  • CASE表达式做分支处理:如果当前对象有header(即header IS NOT NULL),就把test设为空字符串;如果没有header,就保留原来的test值
  • WITHOUT_ARRAY_WRAPPER保证生成的JSON和原结构一致,不会额外嵌套

之前方法的问题:

  • 用REPLACE只能替换键名字符串,无法精准修改对应的值,且会无差别替换所有"header":内容
  • 你之前的OPENJSON脚本只解析了header字段,不管原对象有没有test,都强制生成test='',导致原有test的值被覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:26:07