San*_*anu 3 sql t-sql sql-server json
我想更新JSON数组中的现有JSON值。我可以使用将新的JSON附加到JSON数组JSON_MODIFY。假设我有一个类似JSON:
[{"id":"101","name":"John"}, {"id":"102","name":"peter"}]
Run Code Online (Sandbox Code Playgroud)
但是我只想更新id = 102的json。
有可能使用JSON_MODIFY()吗?
编辑:
实际数据
{"Details":{"SId":{"Type":"string","Value":"1234"},"BookList":{"Type":"List","Value":[{"id": "101", "name": "Book1"},{"id": "102", "name": "Book2"}]},"SName":{"Type":"string","Value":"john"}}}
Run Code Online (Sandbox Code Playgroud)
您可以使用CTE它来解析并UPDATE部分合并路径:
WITH cte AS (
SELECT *
FROM t
CROSS APPLY OPENJSON(c) s
WHERE i = 1
AND JSON_VALUE(s.value, '$.id')=102
)
UPDATE cte
SET c = JSON_MODIFY(c, '$[' + cte.[key] + '].name', 'Joe');
Run Code Online (Sandbox Code Playgroud)
输出:
-- Before
[{"id":"101","name":"John"}, {"id":"102","name":"peter"}]
-- After
[{"id":"101","name":"John"}, {"id":"102","name":"Joe"}]
Run Code Online (Sandbox Code Playgroud)
这将在SQL Server 2017+或SQL Azure DB上运行,否则会出现错误。有关路径文字的更多信息
| 归档时间: |
|
| 查看次数: |
6001 次 |
| 最近记录: |