SQL - JSON_MODIFY() 函数



您可以使用 SQL **JSON_MODIFY()** 函数更新保存在 SQL Server 表列中的 JSON 数据。此函数添加到 JSON 函数系列中,以方便在 SQL Server 中存储、处理和查询 JSON 数据,它首次在 SQL Server 2016 中可用。

JSON_MODIFY() 函数可用于更新 JSON 字符串。它可以用于更新以下项目:

  • 更新现有属性值

  • 在现有数组中添加新元素

  • 从 JSON 字符串中删除属性

  • 删除属性

语法

以下是 SQL JSON_MODIFY() 函数的语法:

JSON_MODIFY ( expression , path , newValue )

参数

  • **expression** - 它通常是包含 JSON 文本的列名或变量。

  • **path** - 指定要更新的属性的 JSON 路径表达式。path 具有以下语法:

[append] [lax | strict] $.<json path>

**append** - 这是一种可选的修饰符,它指定应将新值附加到使用 <json path> 指定的数组。

**lax** - 它指定 <json path> 引用的属性不必存在。如果属性不存在,JSON_MODIFY 会尝试在指定的路径上插入新值。

**strict** - 它指定 <json path> 引用的属性必须存在于 JSON 表达式中。如果属性不存在,它将返回错误。

**<json path>** - 它指定要更新的属性的路径。

  • **newvalue** - path 指示的属性的新值。该值必须为 varchar 或 text。

示例

让我们尝试使用以下查询更新 JSON 字符串的属性值:

DECLARE @work VARCHAR(150) = '{"car":"RX100", "Price":45000}'
SELECT 
   JSON_MODIFY(@work,'$.Item', 'AUDI') AS UpdatedValue;

输出

执行上述查询后,将获得以下输出:

+---------------------------------------------------------+
|                                           UpdatedValue  |
+---------------------------------------------------------+
|            {"car":"RX100", "Price":45000,"Item":"AUDI"} |
+---------------------------------------------------------+

示例

让我们来看另一个场景,我们将使用以下查询更新 JSON 字符串值:

SELECT JSON_MODIFY('{"Place": "INDIA"}', '$.Place', 'DUBAI') AS 'Result';

输出

执行上述查询后,将显示以下输出:

+----------------------------------------------+
|                                       Result |
+----------------------------------------------+
|                           {"Place": "DUBAI"} |
+----------------------------------------------+

示例

在以下示例中,我们将使用以下查询在 JSON 字符串中插入新的属性和值:

DECLARE @work VARCHAR(150) = '{"car":"BMW","Price":2500000}'
DECLARE @path VARCHAR(100) = '$.Color'
DECLARE @newone VARCHAR(50) = 'Green'
SELECT JSON_MODIFY(@work,@Path, @newone) AS UpdatedValue;

输出

执行上述查询后,将获得以下输出:

+---------------------------------------------------------+
|                                           UpdatedValue  |
+---------------------------------------------------------+
|           {"car":"BMW","Price":2500000,"Color":"Green"} |
+---------------------------------------------------------+

示例

让我们来看另一个场景,我们将使用以下查询添加包含数组的新属性值:

DECLARE @work VARCHAR(4000)
DECLARE @new VARCHAR(256) = N'["Engine","Wipers","DieselTank"]';
Set @work='{"Car":"BMW","Price":"2000000"}'
Select JSON_MODIFY(@work,'$.SpareParts',@new) AS 'UpdatedValue';

输出

执行上述查询后,将显示以下输出:

+--------------------------------------------------------------------------------------+
|                                                            UpdatedValue              | 
+--------------------------------------------------------------------------------------+
| {"Car":"BMW","Price":"2000000","SpareParts":"[\"Engine\",\"Wipers\",\"DieselTank\"]"}|
+--------------------------------------------------------------------------------------+

示例

让我们来看以下示例,我们将使用以下查询更新 JSON 数据并检索原始和更新后的 JSON 输出:

DECLARE @work VARCHAR(4000)
SET @work= '{"Beach": "ANDAMAN"}'
SELECT @work AS 'OriginalValue',
   JSON_MODIFY(@work, '$.Beach', 'GOA') AS 'ModifiedValue';

输出

执行上述查询后,将获得以下输出:

+--------------------------+------------------------+
|          OriginalValue   |          ModifiedValue | 
+--------------------------+------------------------+
|    {"Beach": "ANDAMAN"}  |       {"Beach": "GOA"} |
+--------------------------+------------------------+

示例

让我们来看以下示例,我们将使用以下查询重命名键:

DECLARE @work VARCHAR(4000)
SET @work = '{"Brand":"HP"}';
SELECT @work AS 'OriginalValue', 
   JSON_MODIFY(
   JSON_MODIFY(@work, '$.Company', JSON_VALUE(@work,'$.Brand')),
   '$.Brand',NULL) AS UpdatedValue;

输出

执行上述查询后,将显示以下输出:

+----------------+--------------------+
|OriginalValue   | UpdatedValue       |
+----------------+--------------------+
| {"Brand":"HP"} | {"Company":"HP"}   |
+----------------+--------------------+

示例

让我们考虑另一个场景,我们将使用以下查询对 JSON 数据进行多次更改:

DECLARE @work VARCHAR(4000), @new VARCHAR(100);
SET @work = '{"Location":"Himalayas","Place":"Mountains"}';
SET @new = '["Sheep","SnowBear"]';
SELECT @work AS 'OriginalValue', 
   JSON_MODIFY(JSON_MODIFY(@work, '$.Animals', JSON_QUERY(@new)), '$.Location', 'Shimla') AS 'UpdatedValue';

输出

执行上述查询后,将显示以下输出:

+----------------------------------------------+----------------------------------------------------------------------------+
|                              OriginalValue   |                                                         UpdatedValue       |
+----------------------------------------------+----------------------------------------------------------------------------+
| {"Location":"Himalayas","Place":"Mountains"} | {"Location":"Shimla","Place":"Mountains","Animals":["Sheep","SnowBear"]}   |
+----------------------------------------------+----------------------------------------------------------------------------+

示例

让我们来看以下示例,我们将使用以下查询递增 JSON 数据:

DECLARE @work VARCHAR(100)='{"click_count": 140}'
PRINT @work
SET @work=JSON_MODIFY(@work,'$.click_count',
   CAST(JSON_VALUE(@work,'$.click_count') AS INT)+3)
PRINT @work

输出

执行上述查询后,将显示以下输出:

+----------------------+
| {"click_count": 140} |
+----------------------+
| {"click_count": 143} |
+----------------------+
sql-json-functions.htm
广告