SqlServer 操作 JSON

WeihanLi發表於2018-11-25

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

相關文章