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
廣告