如何通过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
相关产品推荐
相关产品推荐

