我有以下JSON数组数据集,需要将其解析为2个表行:
ana@gmail.com
['a', 'n', 'a', '@', 'g', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm']
我需要下面的代码来返回两组员工信息,但它只返回一个。我该如何实现?
[
{ "eid": "ABCDGD",
"name": "Carol E",
"email": "carole@gmail.com",
"role": "Recruiter"
},
{ "eid": "HDHDK",
"name": "Mark H",
"email": "markh@gmail.com",
"role": "Manager"
}
]
SQLfiddle-http://sqlfiddle.com/#!18/9eecb/54970
答案 0 :(得分:1)
无需旋转,只需指定您的json列即可提供所需的结果。
SELECT *
FROM OPENJSON(@c) WITH (
eid varchar(200) '$.eid',
name varchar(200) '$.name',
email varchar(200) '$.email',
role varchar(200) '$.role'
) j1
答案 1 :(得分:0)
JSON已经在其中维护表类型的结构,可以使用OPENJSON
直接将其转换为表。
作为MSDN网站上OPENJSON的语法。
OPENJSON( jsonExpression [ , path ] ) [ <with_clause> ]
<with_clause> ::= WITH ( { colName type [ column_path ] [ AS JSON ] } [ ,...n ] )
这里只需传递您在JSON中维护的列名,即可将您的JSON
转换为SQL Table
。
您可能会在link上找到更多详细信息。
对于上述查询,您可以尝试此操作。
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{ "eid": "ABCDGD",
"name": "Carol E",
"email": "carole@gmail.com",
"role": "Recruiter"
},
{ "eid": "HDHDK",
"name": "Mark H",
"email": "markh@gmail.com",
"role": "Manager"
}
]'
SELECT *
FROM OPENJSON(@json)
WITH (
eid nvarchar(50) '$.eid',
name nvarchar(50) '$.name',
email nvarchar(50) '$.email',
role nvarchar(50) '$.role',
)