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

Ani*_*nil 8 sql-server

我的一个表在 SQL Server 数据库中有 JSON 数据。我需要向现有 JSON 添加新属性。

表中 JSON 数据示例:

{ "FirstName": "John" }
Run Code Online (Sandbox Code Playgroud)

我需要的是向此列添加另一个属性。

{ "FirstName": "Jonh","City":"Pune" }
Run Code Online (Sandbox Code Playgroud)

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

我试过的代码:

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

错误信息:

JSON 路径格式不正确。意外字符 '.' 位于位置 2。

小智 9

从 JSON 添加、更新和删除属性的示例

示例表和数据

declare @Table table
    (JsonColumn varchar(max))

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

select * from  @Table
Run Code Online (Sandbox Code Playgroud)

插入新属性

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

select * from  @Table
Run Code Online (Sandbox Code Playgroud)

更新现有属性

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

select * from  @Table
Run Code Online (Sandbox Code Playgroud)

更新多个现有属性

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

select * from  @Table
Run Code Online (Sandbox Code Playgroud)

删除现有属性

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

select * from  @Table
Run Code Online (Sandbox Code Playgroud)


Jav*_*vil 7

我想你想要这个语法:

UPDATE <TableName>
SET <jsonColumnName>=JSON_MODIFY(<jsonColumnName>,'$.City','Pune')
WHERE UserId=1
Run Code Online (Sandbox Code Playgroud)