下面是 JSON 文本的示例sql
[{
"name": "John",
"skills": ["SQL", "C#", "Azure"]
}, {
"name": "Jane",
"surname": "Doe"
}]json
經過使用 SQL Server 內置函數和運算符,你能夠對 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
在 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
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"}]