SQL Server 中 JSON_MODIFY 的使用
Intro
SQL Server 從 2016 開始支持了一些 JSON操作,最近的專案里也是好多地方欄位直接存成了 JSON,需要了解一下怎么在SQL Server 中操作 JSON.
JSON支持適用于 SQL Server 2016 及以上版本 和 Azure SQL Database,
最近在專案中很多地方欄位都是存一個 JSON 字串,尤其是針對一些有很多不確定的屬性的資料來說,這樣的資訊我們一般都放在一個 Extra 之類的欄位保存一個 JSON 字串,由于不確定性很大,很有可能會遇到要修改這個 JSON 字串結構的問題,在修改 JSON 物件的某一個值和修改 JSON 的結構時都會用到 JSON_MODIFY,今天就來介紹一下 JSON_MODIFY 的使用
示例
直接來看示例:
-- JSON_MODIFY 測驗
DECLARE @testJsonValue NVARCHAR(100) = N'{"name":"John","skills":["C#","SQL"]}';
PRINT @testJsonValue;
-- 適用 append 在陣列中追加元素
PRINT JSON_MODIFY(@testJsonValue, 'append $.skills', 'Azure');
-- 無效用法,這樣會把屬性更新為字串
PRINT JSON_MODIFY(@testJsonValue, '$.skills', '["C#","T-SQL","Azure"]');
-- 修改陣列
PRINT JSON_MODIFY(@testJsonValue, '$.skills', JSON_QUERY('["C#","T-SQL","Azure"]'));
-- 修改陣列某個元素
PRINT JSON_MODIFY(@testJsonValue, '$.skills[0]', 'CSharp');
-- 增加屬嵌套
PRINT JSON_MODIFY(@testJsonValue, '$.Likes', JSON_QUERY('{"Girl": "Alice"}'));
PRINT JSON_MODIFY(@testJsonValue, '$.Likes', JSON_QUERY('{"Animals": ["Dog","Cat"]}'));
-- 增加 bool 屬性
PRINT JSON_MODIFY(@testJsonValue, '$.ShowAwardsAfterQuizEnds', CONVERT(BIT, 'false'));
PRINT JSON_MODIFY(@testJsonValue, '$.ShowAwardsAfterQuizEnds', CONVERT(BIT, 1));
-- 增加 int 屬性
PRINT JSON_MODIFY(@testJsonValue, '$.TotalWinnersCount', CONVERT(INT, '20'));
PRINT JSON_MODIFY(@testJsonValue, '$.TotalWinnersCount', 20);
-- 洗掉屬性
PRINT JSON_MODIFY(@testJsonValue, '$.name', NULL);
輸出結果如下圖:

More
注意:
-
如果要更新的欄位沒有是一個 JSON 物件或是一個陣列,那么需要使用
JSON_QUERY,否則更新的對應的屬性就成了字串了, -
如果是要洗掉某一個屬性,把某一個屬性更新為
NULL即可 -
如果要增加一個 bool 型別的屬性,需要把對應的值轉換為 BIT 型別
Reference
- https://docs.microsoft.com/en-us/sql/t-sql/functions/json-modify-transact-sql?view=sql-server-ver15
- https://docs.microsoft.com/en-us/sql/relational-databases/json/json-path-expressions-sql-server?view=sql-server-ver15
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/28280.html
標籤:SQL Server
上一篇:事務和鎖--查看資料庫中的鎖
下一篇:SQLServer筆記
