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

如何批量更新SQL中包含特定JSON数据的行?

批量更新JSON字段中的密码值

1. 明确JSON键路径的场景

如果清楚password键在JSON结构里的具体路径(比如顶级键$.password,或是嵌套子键$.account.credentials.password),直接结合UPDATE和JSON_MODIFY就能批量处理符合条件的行:

UPDATE MyDatabase
SET RouteValues = JSON_MODIFY(RouteValues, '$.password', '*****')
WHERE RouteValues LIKE '%password%'

如果密码键嵌套在子结构中(例如JSON为{"account": {"username": "johndoe", "password": "johndoePassword"}}),只需调整路径参数即可:

UPDATE MyDatabase
SET RouteValues = JSON_MODIFY(RouteValues, '$.account.password', '*****')
WHERE RouteValues LIKE '%password%'

2. 不确定密码键具体路径的场景

如果JSON结构不固定,密码键可能出现在不同层级,可分两步处理:

第一步:排查所有包含密码的JSON路径

SELECT 
    Id,
    [key] AS PasswordKey,
    path AS PasswordPath
FROM MyDatabase
CROSS APPLY OPENJSON(RouteValues)
WHERE [key] LIKE '%password%'

第二步:根据查到的路径批量更新

如果存在多个不同路径,可通过动态SQL批量执行更新:

DECLARE @sql NVARCHAR(MAX) = ''

SELECT @sql += N'
UPDATE MyDatabase
SET RouteValues = JSON_MODIFY(RouteValues, ''' + REPLACE(PasswordPath, '''', '''''') + ''', ''*****'')
WHERE Id = ' + CAST(Id AS NVARCHAR(10)) + ';'
FROM (
    SELECT DISTINCT Id, path AS PasswordPath
    FROM MyDatabase
    CROSS APPLY OPENJSON(RouteValues)
    WHERE [key] LIKE '%password%'
) AS PasswordPaths

EXEC sp_executesql @sql

验证建议

执行更新前,建议先通过SELECT语句确认修改效果,避免误操作:

SELECT 
    Id,
    RouteValues AS OriginalJSON,
    JSON_MODIFY(RouteValues, '$.password', '*****') AS ModifiedJSON
FROM MyDatabase
WHERE RouteValues LIKE '%password%'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:10:45