SQL Server 有没有办法在替换JSON值的同时将其设置为“”?

h7appiyu  于 2023-01-16  发布在  其他
关注(0)|答案(2)|浏览(114)

我有一个JSON字段,如下所示

[{"header":"C", "value": 1"},{"header":"D", "value": 2},{"header":"E", "value": 3}]

我想更改JSON值标头的名称并将其设置为“”,但我只能更改值。

UPDATE Files SET Columns = REPLACE(Columns, '"header":', '"test":')

我希望它看起来像这样:

[{"test":"", "value": 1},{"test":"", "value":2},{"test":"", "value": 3}]

是否有办法在REPLACE函数中将重命名的值设置为“”?
-EDIT -如何保持第二个值不变,同时清除第一个值并更改其名称?

5lhxktic

5lhxktic1#

您将需要使用OPENJSON来重新构建JSON以将其打开,使用FOR JSON PATH来重新构建JSON

UPDATE Files
SET Columns = (
    SELECT test = ''
      -- more properties here
    FROM OPENJSON(Columns)
      WITH (
        header nvarchar(10)
        -- more properties here
      ) j
    FOR JSON PATH
);

db<>fiddle

mqxuamgl

mqxuamgl2#

DECLARE @Json VARCHAR(200)='[{"header":"C"},{"header":"D"},{"header":"E"}]'


SELECT '['+STRING_AGG(JsonVal,',')+']'
FROM (
SELECT A.JsonVal FROM OPENJSON(@Json)
CROSS APPLY(SELECT '{"test":""}' AS JsonVal) A ) J

相关问题