【发布时间】:2019-07-17 04:28:59
【问题描述】:
我在 SQL Server 列中有一个 json 数组,我正在尝试将所有名称更新为“Joe”。
我尝试了下面的代码,但它只更新了 json 数组的第一个元素
CREATE TABLE #t (I INT, JsonColumn NVARCHAR(MAX) CHECK (ISJSON(JsonColumn) > 0))
INSERT INTO #t
VALUES (1, '[{"id":"101","name":"John"}, {"id":"102","name":"peter"}]')
INSERT INTO #t VALUES (2,'[{"id":"103","name":"dave"}, {"id":"104","name":"mark"}]')
SELECT * FROM #t
SELECT * FROM #t
CROSS APPLY OPENJSON(JsonColumn) s
WITH cte AS
(
SELECT *
FROM #t
CROSS APPLY OPENJSON(JsonColumn) s
)
UPDATE cte
SET JsonColumn = JSON_MODIFY(JsonColumn, '$[' + cte.[key] + '].name', 'Joe')
SELECT * FROM #t
-- DROP TABLE #t
它只是将数组的第一个元素更新为 joe
当前结果:
[{"id":"101","name":"Joe"}, {"id":"102","name":"cd"}]
[{"id":"103","name":"Joe"}, {"id":"104","name":"mark"}]
预期
[{"id":"101","name":"Joe"}, {"id":"102","name":"Joe"}]
[{"id":"103","name":"Joe"}, {"id":"104","name":"Joe"}]
【问题讨论】:
-
据我所知,您必须分别更新 JSON 数组的每个元素。
-
@TimBiegeleisen,理想情况下,我想在一笔交易中更新
-
@PrasanthTP JSON 的结构是什么 - 固定(
id,name)还是可以不同?你的 SQL Server 版本是多少?谢谢。 -
hi json 结构是固定的
标签: sql sql-server