将每个员工的员工详细信息作为JSON数组返回给SQL Server中的每个员工
我想从SQL server以JSON对象的形式返回查询结果。我有下面的Employee和EmployeeDtl表将每个员工的员工详细信息作为JSON数组返回给SQL Server中的每个员工,json,sql-server,Json,Sql Server,我想从SQL server以JSON对象的形式返回查询结果。我有下面的Employee和EmployeeDtl表 DROP TABLE IF EXISTS #Employee CREATE TABLE #Employee (EmpId bigint, EmpName varchar(2000)) INSERT INTO #Employee VALUES (1, 'A') DROP TABLE IF EXISTS #EmployeeDtl CREATE TABLE #EmployeeDtl (
DROP TABLE IF EXISTS #Employee
CREATE TABLE #Employee (EmpId bigint, EmpName varchar(2000))
INSERT INTO #Employee VALUES (1, 'A')
DROP TABLE IF EXISTS #EmployeeDtl
CREATE TABLE #EmployeeDtl (EmpId bigint, WorkObject varchar(100), LocationName varchar(100))
INSERT INTO #EmployeeDtl VALUES (1, 'AAA', 'AAAAA')
INSERT INTO #EmployeeDtl VALUES (1, 'BBB', 'BBBB')
INSERT INTO #EmployeeDtl VALUES (1, 'CCC', 'CCCC')
我想以下面的格式返回数据
{
"Employees": [{
"EmpId": 1,
"EmpName": "A",
"EmpDtl": [{
"WorkObject": "AAA",
"LocationName": "AAAAA"
},
{
"WorkObject": "BBB",
"LocationName": "BBBB"
},
{
"WorkObject": "CCC",
"LocationName": "CCCC"
}
]
}]
}
{
"Employees": [{
"EmpId": 1,
"EmpName": "A",
"EmpDtl": {
"WorkObject": "AAA",
"LocationName": "AAAAA"
}
}, {
"EmpId": 1,
"EmpName": "A",
"EmpDtl": {
"WorkObject": "BBB",
"LocationName": "BBBB"
}
}, {
"EmpId": 1,
"EmpName": "A",
"EmpDtl": {
"WorkObject": "CCC",
"LocationName": "CCCC"
}
}]
}
我已经写了下面的查询
SELECT
E.EmpId, E.EmpName, ED.WorkObject AS [EmpDtl.WorkObject], ED.LocationName AS [EmpDtl.LocationName]
FROM
#Employee E
INNER JOIN #EmployeeDtl ED ON E.EmpId = ED.EmpId
FOR
JSON PATH, ROOT('Employees')
但是,上面的查询以下面的格式返回数据
{
"Employees": [{
"EmpId": 1,
"EmpName": "A",
"EmpDtl": [{
"WorkObject": "AAA",
"LocationName": "AAAAA"
},
{
"WorkObject": "BBB",
"LocationName": "BBBB"
},
{
"WorkObject": "CCC",
"LocationName": "CCCC"
}
]
}]
}
{
"Employees": [{
"EmpId": 1,
"EmpName": "A",
"EmpDtl": {
"WorkObject": "AAA",
"LocationName": "AAAAA"
}
}, {
"EmpId": 1,
"EmpName": "A",
"EmpDtl": {
"WorkObject": "BBB",
"LocationName": "BBBB"
}
}, {
"EmpId": 1,
"EmpName": "A",
"EmpDtl": {
"WorkObject": "CCC",
"LocationName": "CCCC"
}
}]
}
你能帮我理解我做错了什么吗。你需要将#EmployeeDtl
嵌套为子查询:
SELECT E.EmpId,
E.EmpName,
(SELECT ED.WorkObject AS [WorkObject],
ED.LocationName AS [LocationName]
FROM #EmployeeDtl ED
WHERE ED.EmpId = E.EmpId
FOR JSON PATH) AS EmpDtl
FROM #Employee E
FOR JSON PATH, ROOT('Employees');
输出:
{
"Employees": [
{
"EmpId": 1,
"EmpName": "A",
"EmpDtl": [
{
"WorkObject": "AAA",
"LocationName": "AAAAA"
},
{
"WorkObject": "BBB",
"LocationName": "BBBB"
},
{
"WorkObject": "CCC",
"LocationName": "CCCC"
}
]
}
]
}
您需要将#EmployeeDtl
嵌套为子查询:
SELECT E.EmpId,
E.EmpName,
(SELECT ED.WorkObject AS [WorkObject],
ED.LocationName AS [LocationName]
FROM #EmployeeDtl ED
WHERE ED.EmpId = E.EmpId
FOR JSON PATH) AS EmpDtl
FROM #Employee E
FOR JSON PATH, ROOT('Employees');
输出:
{
"Employees": [
{
"EmpId": 1,
"EmpName": "A",
"EmpDtl": [
{
"WorkObject": "AAA",
"LocationName": "AAAAA"
},
{
"WorkObject": "BBB",
"LocationName": "BBBB"
},
{
"WorkObject": "CCC",
"LocationName": "CCCC"
}
]
}
]
}