如何在SQL Server列中向JSON对象添加属性

13

我的某张表格在SQL Server数据库中有JSON数据。我需要在现有的JSON中添加新属性。

JSON数据的示例:

{ "FirstName": "John" }
我需要的是在这个列中添加另一个属性。
{ "FirstName": "Jonh","City":"Pune" }

我尝试使用JSON_MODIFY函数,但它会抛出错误。这个函数只适用于数组吗?

我尝试的代码:

update <TableName> 
set <jsonColumnName> = JSON_MODIFY(<jsonColumnName>, '$.', JSON_QUERY(N'{ "City":"Pune" }'))
where UserId = 1

错误信息:

JSON路径格式不正确。在位置2发现了意外字符'.'。

4个回答

15

我认为您想要的语法是:

UPDATE <TableName>
SET <jsonColumnName>=JSON_MODIFY(<jsonColumnName>,'$.City','Pune')
WHERE UserId=1

8

示例:如何从JSON中添加、更新和删除属性

样本表格及数据

declare @Table table
    (JsonColumn varchar(max))

insert into @Table
values
('{"FirstName": "John"}')

select * from  @Table

插入新属性

UPDATE @Table
SET JsonColumn=JSON_MODIFY(JsonColumn,'$.City','Pune')

select * from  @Table

更新现有属性

UPDATE @Table
SET JsonColumn=JSON_MODIFY(JsonColumn,'$.City','Delhi')

select * from  @Table

更新多个现有属性

UPDATE @Table
SET JsonColumn= JSON_MODIFY(JSON_MODIFY(JsonColumn,'$.City','Delhi'), '$.FirstName', 'Mukesh')

select * from  @Table

删除现有属性

UPDATE @Table
SET JsonColumn=JSON_MODIFY(JsonColumn,'$.City',null)

select * from  @Table

1
在您的情况下,您需要使用JSON_Modify的append。类似这样:
UPDATE <TableName>
SET <jsonColumnName> = JSON_MODIFY(<jsonColumnName>, 'append $', JSON_QUERY(N'{"City":"Pune"}'))
WHERE UserId=1;

1
谢谢你的回答,但我已经尝试过了,但没有起作用。我猜append只适用于数组。"Java Devil"的答案有效。 - Anil

0
我想补充一下,Gauravsa's answer 在将对象存储到 JSON 属性时非常有帮助,否则它将被存储为反序列化的对象。
一个使用示例是:
UPDATE [TableName]
SET [jsonColumnName]=JSON_MODIFY([jsonColumnName],'$.secondaryActionColor', JSON_QUERY(N'{"alpha":1,"hex":"#FFC600","hexa":"#FFC600FF","hsla":{"h":46.588235294117645,"s":1,"l":0.5,"a":1},"hsva":{"h":46.588235294117645,"s":1,"v":1,"a":1},"hue":46.588235294117645,"rgba":{"r":255,"g":198,"b":0,"a":1}}'))
WHERE UserId=1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接