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

如何通过JSON对象数组更新SQL Server 2019的WeeklySlots表?

SQL Server 2019 更新WeeklySlots表slots字段解决方案

不需要递归函数,直接通过JSON解析+关联更新即可完成操作,具体步骤如下:

1. 解析JSON payload到临时结果集

用OPENJSON函数将@payload中的JSON对象数组解析成关系型结果集,提取用于关联表的主键(比如WeeklySlotId,需匹配你的表结构)和要更新的slots内容。示例代码:

SELECT 
    JSON_VALUE(item.value, '$.WeeklySlotId') AS WeeklySlotId,
    -- 若slots是嵌套JSON结构,用JSON_QUERY保留格式;若为普通值则用JSON_VALUE
    JSON_QUERY(item.value, '$.slots') AS UpdatedSlots
INTO #ParsedPayload
FROM OPENJSON(@payload) AS item;

注:请根据你的@payload实际JSON结构调整字段路径和提取函数。

2. 执行关联更新

通过UPDATE JOIN方式,将原表与解析后的临时表关联,直接更新slots字段。示例代码:

UPDATE ws
SET ws.slots = pp.UpdatedSlots
FROM WeeklySlots ws
INNER JOIN #ParsedPayload pp
    ON ws.WeeklySlotId = pp.WeeklySlotId;

如果需要验证更新结果,可添加OUTPUT子句查看更新前后的数据:

UPDATE ws
SET ws.slots = pp.UpdatedSlots
OUTPUT inserted.WeeklySlotId, deleted.slots AS 旧Slots值, inserted.slots AS 新Slots值
FROM WeeklySlots ws
INNER JOIN #ParsedPayload pp
    ON ws.WeeklySlotId = pp.WeeklySlotId;

3. 清理临时表(可选)

操作完成后删除临时表释放资源:

DROP TABLE IF EXISTS #ParsedPayload;

为什么不需要递归函数?

递归函数多用于处理层级嵌套的树形数据或迭代逻辑,而本次需求只是将JSON数组解析为关系数据后,执行常规的表关联更新,完全属于SQL基础操作范畴,无需递归。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:17