下面是 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"}]