如何在MSSQL中通过键更新JSON字典中的值
在SQL Server中更新JSON字段内字典的指定键值
你可以通过动态拼接JSON路径结合JSON_MODIFY函数实现需求,核心是处理带特殊字符的键名,以下是完整解决方案:
完整更新语句
-- 定义目标键和新的访问时间 DECLARE @targetKey NVARCHAR(50) = '7f90a25b-f5d4-eb11-bacb-0022481aa333'; DECLARE @newVisitTime NVARCHAR(50) = '2023-07-06T13:00:00Z'; -- 更新符合条件的行 UPDATE Visits SET AdditionalInfo = JSON_MODIFY( AdditionalInfo, -- 动态拼接带双引号的JSON路径,适配含特殊字符的键 CONCAT('$.LastVisit."', @targetKey, '"'), @newVisitTime ) -- 仅更新包含目标键的行 WHERE EXISTS ( SELECT 1 FROM OPENJSON(AdditionalInfo, '$.LastVisit') WHERE [key] = @targetKey );
关键说明
- JSON路径的特殊处理:由于目标键包含连字符这类特殊字符,必须用双引号将键名包裹,通过
CONCAT动态生成$.LastVisit."目标键"格式的合法路径 - 保留原有JSON结构:
JSON_MODIFY仅修改指定键的值,JSON对象的其他键值对会完整保留 - 精准筛选目标行:沿用你原有的
EXISTS逻辑,确保只更新包含目标键的记录,不干扰其他行
验证更新结果
执行以下语句查看更新后的JSON数据:
SELECT Id, AdditionalInfo FROM Visits;
内容的提问来源于stack exchange,提问作者JML
相关产品推荐
相关产品推荐

