SQL Server 中的 JSON 數據

下面是 JSON 文本的示例sql

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

經過使用 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')spa

將 JSON 集合轉換爲行集

在 SQL Server 中查詢 JSON 不須要自定義查詢語言。 能夠使用標準的 T-SQL 查詢 JSON 數據。 若是必須基於 JSON 數據建立查詢或報表,能夠經過調用 OPENJSON 行集函數,輕鬆地將 JSON 數據轉換爲行與列 。 有關詳細信息,請參閱用 OPENJSON 將 JSON 數據轉換爲行和列 (SQL Server)code

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

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 對象的數組轉換爲表,其中每一個對象表示爲一行,鍵/值對將做爲單元返回。 輸出遵循下列規則:blog

  • 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 PATHget

應用程序池:」 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"}]

相關文章
相關標籤/搜索