SQL Server 中的 JSON 數據


下面是 JSON 文本的示例

[{
"name": "John",
"skills": ["SQL", "C#", "Azure"]
}, {
"name": "Jane",
"surname": "Doe"
}]

通過使用 SQL Server 內置函數和運算符,你可以對 JSON 文本執行以下操作:

  • 分析 JSON 文本和讀取或修改值。
  • 將 JSON 對象數組轉換為表格式。
  • 在轉換后的 JSON 對象上運行任意 Transact-SQL 查詢。
  • 將 Transact-SQL 查詢的結果設置為 JSON 格式。

內置的 JSON 支持概述

在以下示例中,查詢同時使用表中的關系數據和 JSON 數據(存儲在名為 jsonCol 的列中):

SELECT Name,Surname,
JSON_VALUE(jsonCol,'$.info.address.PostCode') AS PostCode,
JSON_VALUE(jsonCol,'$.info.address."Address Line 1"')+' '
+JSON_VALUE(jsonCol,'$.info.address."Address Line 2"') AS Address,
JSON_QUERY(jsonCol,'$.info.skills') AS Skills
FROM People
WHERE ISJSON(jsonCol)>0
AND JSON_VALUE(jsonCol,'$.info.address.Town')='Belgrade'
AND Status='Active'
ORDER BY JSON_VALUE(jsonCol,'$.info.address.PostCode')

將 JSON 集合轉換為行集

在 SQL Server 中查詢 JSON 不需要自定義查詢語言。 可以使用標准的 T-SQL 查詢 JSON 數據。 如果必須基於 JSON 數據創建查詢或報表,可以通過調用 OPENJSON 行集函數,輕松地將 JSON 數據轉換為行與列 。 有關詳細信息,請參閱用 OPENJSON 將 JSON 數據轉換為行和列 (SQL Server)

以下示例調用 OPENJSON,並且將 @json 變量中存儲的對象數組轉換為可使用標准 SQL SELECT 語句查詢的行集 :

DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{ "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },
{ "id" : 5,"info": { "name": "Jane", "surname": "Smith" }, "dob": "2005-11-04T12:00:00" }
]'

SELECT *
FROM OPENJSON(@json)
WITH (id int 'strict $.id',
firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',
age int, dateOfBirth datetime2 '$.dob')

OPENJSON 將 JSON 對象的數組轉換為表,其中每個對象表示為一行,鍵/值對將作為單元返回。 輸出遵循下列規則:

  • OPENJSON 將 JSON 值轉換為 WITH 子句中指定的類型 。
  • OPENJSON 可以處理規則的鍵/值對以及分層組織的對象。
  • 不需要返回 JSON 文本中包含的所有字段。
  • 如果 JSON 值不存在,OPENJSON 返回 NULL 值。
  • 可以選擇在類型規范后指定一個路徑,以引用嵌套屬性或按不同的名稱引用屬性。
  • 路徑中可選的 strict 前綴指定 JSON 文本中必須存在指定屬性的值。 

SELECT id, firstName AS "info.name", lastName AS "info.surname", age, dateOfBirth as dob
FROM People
FOR JSON PATH

應用程序池:” FOR JSON 子句將 SQL 結果的格式設置為 JSON 文本,該格式可提供給識別 JSON 的任何應用。 PATH 選項在 SELECT 子句中使用以點分隔的別名,以嵌套查詢結果中的對象。

[{
"id": 2,
"info": {
"name": "John",
"surname": "Smith"
},
"age": 25
}, {
"id": 5,
"info": {
"name": "Jane",
"surname": "Smith"
},
"dob": "2005-11-04T12:00:00"
}]

 


免責聲明!

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



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