SqlServer 操作 JSON


SqlServer 操作 JSON

Intro

Sql Server 從 2016 開始支持了一些 json 操作,最近的項目里也是好多地方直接用字段直接存成了 json ,需要了解一下怎么在 Sql Server 中操作 JSON.
JSON支持適用於 SqlServer 2016 及以上版本 和 Azure SQL Database。

SqlServer 中內置了一些 JSON 相關的方法:
可以判斷一段字符串是否是標准的 json(ISJSON
可以直接查詢數據成 json 格式(FOR JSON PATH) 類似於之前的查詢一個 xml (FOR XML PATH),
查詢一個 json 對象的值(JSON_VALUE)
查詢一個 json 數組值
更新一段JSON的內容,修改 JSON 對象里的屬性值,刪除 JSON 對象里的某一個屬性,增加屬性
解析一段 json 內容 (OPENJSON)

JSON 操作

JSON 存儲

數據庫里 JSON 存儲一般用 NVARCHAR(MAX) 類型來保存,如果一定是 JSON 形式的數據可以設置一個約束,可以通過 ISJSON 來給字段加約束,詳情參考

JSON 屬性加索引

要給 JSON 對象的某個屬性加字段時,需要增加一個虛擬的列,然后在這個列中建立一個索引。

ALTER TABLE Sales.SalesOrderHeader
ADD vCustomerName AS JSON_VALUE(Info,'$.Customer.Name')

CREATE INDEX idx_soh_json_CustomerName
ON Sales.SalesOrderHeader(vCustomerName)

JSON 基本操作

{
    "name": "小明",
    "info": {
        "address": {
            "province": "河南省",
            "city": "鄭州市",
            "district": "鄭東新區"
        },
        "hobbies": [
            "籃球",
            "足球",
            "乒乓球"
        ]
    }
}
-- 查詢某一屬性值
SET @name = JSON_VALUE(@jsonInfo, '$.name');
SET @city = JSON_VALUE(@jsonInfo, '$.info.address.city');

-- 查詢數組
SET @hobbies = JSON_QUERY(@jsonInfo, '$.info.hobbies');

-- 增加屬性 tempProp

SET @jsonInfo = JSON_MODIFY(@jsonInfo, 'tempProp', 1);

-- 刪除屬性 tempProp
SET @jsonInfo = JSON_MODIFY(@jsonInfo, 'tempProp', null);

Reference


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM